+9

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

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 giúp việc rebase diễn ra suôn 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 😇

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí