- vừa được xem lúc

Sửa một commit cũ Like A Boss?

0 0 20

Người đăng: Nghiệp

Theo Viblo Asia

git commit --amend có lẽ đã quá quen thuộc, nhưng với --amend chỉ commit hay sửa được commit cuối cùng mà thôi.

I. Đặt vấn đề

Đây là git log hiện tại:

2869a6b (HEAD->main) feat: add forgot page (7 hours ago)
b6f6b90 feat: add sign up page (1 day ago)
768caf4 feat: add sign in page (2 days ago)
aac33b7 Initial commit (3 days ago)

Tôi đang làm một feature mới là trang reset.tsx page, và bỗng phát hiện SignIn.tsx bị sai chính tả và rất khó chịu, tôi quyết định sửa và commit nó vào chung với:

768caf4 feat: add sign in page

Khó là không thể dùng --amend bởi vì 768caf4 không phải là commit cuối cùng.

II. Giải quyết

Cùng xem git diff hiện tại:

diff --git a/Reset.tsx b/Reset.tsx
new file mode 100644
index 0000000..c9e7d74
--- /dev/null
+++ b/Reset.tsx
@@ -0,0 +1,5 @@
+const Reset = () => {
+ return <div>Reset page</div>;
+};
+
+export default Reset;

diff --git a/SignIn.tsx b/SignIn.tsx
index f387d14..c541661 100644
--- a/SignIn.tsx
+++ b/SignIn.tsx
@@ -1,5 +1,5 @@
const SignIn = () => {
- return <div>Wellcome, please sign in.</div>;
+ return <div>Welcome, please sign in.</div>;
}; export default SignIn;

Nhìn qua diff ta thấy working directory hiện tại có tạo mới Reset.tsx và sửa đổi chính tả chữ "Wellcome" thành "Welcome" trong SignIn.tsx.

Tất nhiên chúng ta chỉ quan tâm đến SignIn.tsx và cố gắng commit thay đổi vào 768caf4 feat: add sign in page là xong bài toán.


B1: Chỉ thêm SignIn.tsx vào staged changes

$ git add SignIn.tsx

B2: commit với --fixup=<SHA> mà chúng ta muốn amend vào.

$ git commit --fixup=768caf4

B3: Dọn dẹp với rebase -i --autosquash <SHA>~1

$ git rebase -i --autosquash --autostash 768caf4~1

And bùmmmm! Xem thành quả như chưa hề có một lỗi lầm nào ở SignIn.tsx

III. Tổng kết

  • Bước cuối cùng --autostash có ỹ nghĩa quan trọng nó giúp việc rebase diễn ra suông sẽ hơn, nó đưa các changes hiện tại vào stash và trả lại như cũ sau khi hoàn thành, cụ thể ở đây là Reset.tsx
  • Sửa commit cũ chỉ khuyến khích khi chưa push to remote, mọi hành động push --force đều không được khuyến khích 😇

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 770

- vừa được xem lúc

Tập hợp những câu lệnh GIT hữu dụng

Dưới đây là một vài ví dụ về các câu lệnh Git mà tôi thường dùng. git config --global user.name "John Doe". git config --global user.

0 0 68

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 2): Trigger một work flow

Events trigger. Bạn có thể cấu hình cho workflows chạy khi có một sự kiện nào đó xảy ra trên GitHub, theo một lịch có sẵn hoặc cũng có thể là một sự kiện nào đó xảy ra ngoài GitHub.

0 0 80

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 1): Một ít lý thuyết

CI/CD là gì. Về mặt khái niệm là vậy nhưng về mặt triển khai thì CI/CD là quá trình tự động thực hiện các quá trình build, test, release, deploy khi có các trigger như commit/merge code lên một branch định sẵn hoặc có thể là tự động chạy theo một lịch cố định.

0 0 128

- vừa được xem lúc

Giới thiệu về Git LFS

. Git LFS là gì . Git LFS làm điều này bằng cách thay thế các tệp lớn trong repo của bạn bằng một con trỏ nhỏ.

0 0 37

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 85