Câu trả lời của @Mureinik là tốt nhưng không dễ hiểu bởi người mới.
Phương pháp đầu tiên:
- Nếu bạn chỉ muốn chỉnh sửa tin nhắn cam kết mới nhất, thì bạn chỉ cần
git commit --amend
, bạn sẽ thấy:
<your existing commit mesage foo bar>
# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# On branch is up to date with 'origin/master'.
#
# changes to be committed:
# modified: foo.py
#
- Như bạn có thể thấy, cam kết thông báo trên đầu mà không có bất kỳ tiền tố lệnh nào, chẳng hạn như
pick
đây đã là trang chỉnh sửa và bạn có thể trực tiếp chỉnh sửa tin nhắn hàng đầu và lưu & thoát , ví dụ:
<your new correction commit message>
# Please enter the commit message for your changes. Lines starting
....
- Sau đó làm
git push -u origin master --force
hoặc <how you push normally> --force
. Chìa khóa ở đây là --force
.
Phương pháp thứ hai:
Bạn có thể thấy hàm băm cam kết bằng git log
hoặc trích xuất từ url kho lưu trữ, ví dụ trong trường hợp của tôi là881129d771219cfa29e6f6c2205851a2994a8835
Sau đó, bạn có thể làm git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
hoặc git rebase -i HEAD^
(nếu mới nhất)
Bạn sẽ thấy:
pick <commit hash> <your current commit message>
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
- Nhưng nếu bạn thấy
noop
thì có lẽ bạn đang gõ sai, ví dụ nếu bạn làm git rebase -i 881129d771219cfa29e6f6c2205851a2994a88
thiếu ^
phần cuối, tốt nhất bạn nên thoát trình soạn thảo mà không lưu và tìm ra lý do:
noop
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
- Nếu không có
noop
vấn đề gì, thì chỉ cần thay đổi từ pick
thành reword
, phần còn lại (bạn không chỉnh sửa thông báo cam kết tại thời điểm này), ví dụ:
reword <commit hash> <your current commit message>
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
...
- Lưu và thoát sẽ thấy trang chỉnh sửa tương tự như phương pháp # 1:
<your existing commit mesage foo bar>
# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# interactive rebase in progress; onto b057371
# Last command done (1 command done):
# reword d996ffb <existing commit message foo bar>
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'b057371'.
#
# changes to be committed:
# modified: foo.py
#
- Chỉnh sửa tin nhắn trên cùng, giống như phương pháp # 1 và lưu và thoát, ví dụ:
<your new correction commit message>
# Please enter the commit message for your changes. Lines starting
....
- Một lần nữa, giống như phương pháp # 1, làm
git push -u origin master --force
hoặc <how you push normally> --force
. Chìa khóa ở đây là --force
.
Để biết thêm thông tin xin vui lòng đọc tài liệu .