修改 Commit Message
本文源自極客時間 《go 語言項目開發實戰 孔令飛》
本文是 rebase 命令的一個使用場景,關於rebase命令,可以參考這篇:git rebase 命令介紹
即使我們有了 Commit Message 規范,但仍然可能會遇到提交的 Commit Message 不符合規范的情況,這個時候就需要我們能夠修改之前某次 commit 的 Commit Message。
具體來說,我們有兩種修改方法,分別對應兩種不同情況:
- git commit --amend:修改最近一次 commit 的 message;
- git rebase -i:修改某次 commit 的 message。
接下來,我們分別來說這兩種方法。
git commit --amend:修改最近一次 commit 的 message
有時候,我們剛提交完一個 commit,但是發現 commit 的描述不符合規范或者需要糾正,這時候,我們可以通過 git commit --amend 命令來修改剛剛提交 commit 的 Commit Message。具體修改步驟如下:
1.查看當前分支的日志記錄。
$ git log –oneline
418bd4 docs(docs): append test line 'update$i' to README.md
89651d4 docs(doc): add README.md
可以看到,最近一次的 Commit Message 是 docs(docs): append test line 'update$i' to README.md,其中 update$i 正常應該是 update1。
2.更新最近一次提交的 Commit Message
在當前 Git 倉庫下執行命令:git commit --amend,后會進入一個交互界面,在交互界面中,修改最近一次的 Commit Message,如下圖所示:

修改完成后執行:wq 保存,退出編輯器之后,會在命令行顯示,該 commit 的 message 的更新結果如下:
[master 55892fa] docs(docs): append test line 'update1' to README.md
Date: Fri Sep 18 13:40:42 2020 +0800
1 file changed, 1 insertion(+)
3.查看最近一次的 Commit Message 是否被更新
$ git log --oneline
55892fa docs(docs): append test line 'update1' to README.md
89651d4 docs(doc): add README.md
可以看到最近一次 commit 的 message 成功被修改為期望的內容。
git rebase -i:修改某次 commit 的 message
如果我們想修改的 Commit Message 不是最近一次的 Commit Message,可以通過 git rebase -i <父 commit ID>命令來修改。這個命令在實際開發中使用頻率比較高,我們一定要掌握。具體來說,使用它主要分為 4 步。
1.查看當前分支的日志記錄。
$ git log --oneline
1d6289f docs(docs): append test line 'update3' to README.md
a38f808 docs(docs): append test line 'update$i' to README.md
55892fa docs(docs): append test line 'update1' to README.md
89651d4 docs(doc): add README.md
可以看到倒數第 3 次提交的 Commit Message 是:docs(docs): append test line 'update$i' to README.md,其中 update$i 正常應該是 update2。
2.修改倒數第 3 次提交 commit 的 message。
在 Git 倉庫下直接執行命令 git rebase -i 55892fa,然后會進入一個交互界面。在交互界面中,修改最近一次的 Commit Message。這里我們使用 reword 或者 r,保留倒數第 3 次的變更信息,但是修改其 message,如下圖所示:

修改完成后執行:wq 保存,還會跳轉到一個新的交互頁面,如下圖所示:

修改完成后執行:wq 保存,退出編輯器之后,會在命令行顯示該 commit 的 message 的更新結果:
[detached HEAD 5a26aa2] docs(docs): append test line 'update2' to README.md
Date: Fri Sep 18 13:45:54 2020 +0800
1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/master.
Successfully rebased and updated refs/heads/master.說明 rebase 成功,其實這里完成了兩個步驟:更新 message,更新該 commit 的 HEAD 指針。
注意:這里一定要傳入想要變更 Commit Message 的父 commit ID:git rebase -i <父 commit ID>。
3.查看倒數第 3 次 commit 的 message 是否被更新。
$ git log --oneline
7157e9e docs(docs): append test line 'update3' to README.md
5a26aa2 docs(docs): append test line 'update2' to README.md
55892fa docs(docs): append test line 'update1' to README.md
89651d4 docs(doc): add README.md
可以看到,倒數第 3 次 commit 的 message 成功被修改為期望的內容。
這里有兩點需要你注意:
- Commit Message 是 commit 數據結構中的一個屬性,如果 Commit Message 有變更,則 commit ID 一定會變,git commit --amend 只會變更最近一次的 commit ID,但是 git rebase -i 會變更父 commit ID 之后所有提交的 commit ID。
- 如果當前分支有未 commit 的代碼,需要先執行 git stash 將工作狀態進行暫存,當修改完成后再執行 git stash pop 恢復之前的工作狀態。
