如何修改 Git 提交消息
一、概述
在本教程中,我們將了解如何修改 Git 提交消息,無論它是最近的提交還是較舊的提交。
2. 修改最近的提交信息
我們將從最簡單的情況開始。讓我們構建一個在其提交消息中有錯字的瑣碎提交:
$ touch file1
$ git add file1
$ git commit -m "Ading file1"
[articles/BAEL-5627-how-to-modify-git-commit-message 3e9ac2dbcd] Ading file1
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1
現在讓我們確認我們最新的提交消息中是否存在拼寫錯誤,並註意提交的哈希:
$ git log -1
commit 3e9ac2dbcdde562e50c5064b288f5b3fa23f39da (HEAD -> articles/BAEL-5627-how-to-modify-git-commit-message)
Author: baeldung <[email protected]>
Date: Tue Jun 21 21:53:12 2022 +0200
Ading file1
要修復錯字,我們將使用amend選項:
$ git commit --amend -m "Adding file1"
[articles/BAEL-5627-how-to-modify-git-commit-message 66dfa06796] Adding file1
Date: Tue Jun 21 21:53:12 2022 +0200
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1
同樣,讓我們顯示最近的提交:
$ git log -1
commit 66dfa067969f941eef5304a6fbcd5b22d0ba6c2b (HEAD -> articles/BAEL-5627-how-to-modify-git-commit-message)
Author: baeldung <[email protected]>
Date: Tue Jun 21 21:53:12 2022 +0200
Adding file1
我們現在可以確認最新消息中的拼寫錯誤已修復,但也請注意提交哈希已更改。從技術上講,我們沒有更改我們的提交,而是用一個新的提交替換了它。
3. 改寫舊的提交消息
現在讓我們添加兩個新的提交,這樣拼寫錯誤就不會出現在最近的提交中,而是出現在較舊的提交中:
$ touch file2
$ git add file2
$ git commit -m "Ading file2"
[articles/BAEL-5627-how-to-modify-git-commit-message ffb7a68bf6] Ading file2
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file2
$ touch file3
$ git add file3
$ git commit -m "Adding file3"
[articles/BAEL-5627-how-to-modify-git-commit-message 517193e1e9] Adding file3
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 fil3
讓我們檢查一下我們剛剛添加的兩個提交:
$ git log -2
commit 517193e1e99c784efd48086f955fcdbc3110d097 (HEAD -> articles/BAEL-5627-how-to-modify-git-commit-message)
Author: baeldung <[email protected]>
Date: Tue Jun 21 22:04:56 2022 +0200
Adding file3
commit ffb7a68bf63c7da9bd0b261ebb9b2ca548aa1333
Author: baeldung <[email protected]>
Date: Tue Jun 21 22:02:59 2022 +0200
Ading file2
Git 的amend
選項只適用於最新的 commit ,所以這次我們不能用它來修復錯字。
相反,我們將使用rebase
。
3.1。啟動交互式變基
要修復較舊的提交消息,讓我們通過運行以下命令繼續所謂的交互式 rebase :
$ git rebase -i HEAD~2
hint: Waiting for your editor to close the file...
這裡的HEAD~2
意味著我們將重新訪問最近的兩個提交。
這將在您的機器上打開與 Git 關聯的文本編輯器,並在編輯器中填充可在變基過程中使用的所有命令,包括:
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
正如我們所看到的,我們可以在 rebase 提交時做各種各樣的事情,比如通過squash
命令將兩個提交合併為一個。
在這裡,我們要重寫提交消息,所以我們將使用reword
命令。
3.2.改寫提交消息
編輯器中的前兩行包含以下文本:
pick ffb7a68bf6 Ading file2
pick 517193e1e9 Adding file3
請注意,在此視圖中,提交是從最舊到最新列出的,而不是我們使用[git log](https://git-scm.com/docs/git-log)
時。
讓我們將第一行改為使用reword
命令而不是pick
命令;我們將pick
第二次提交,因為我們希望保持該消息原樣:
reword ffb7a68bf6 Ading file2
pick 517193e1e9 Adding file3
如果我們想在一個 rebase 中更改兩條消息,我們可以簡單地將兩行的命令更改為reword
。
現在,我們還沒有更改提交消息。所以讓我們保存我們的文件並關閉文本編輯器,它讓 Git 知道我們已經完成了我們的變基指令。
Git 現在將處理變基命令,在需要我們交互時提示我們。由於我們告訴 Git reword
第一次提交,它會用第一次提交的內容重新打開文本編輯器。第一行包含提交消息:
Ading file2
以下幾行的註釋描述了reword
操作的工作方式。
讓我們通過將第一行修改為“Adding file2”、保存文件並關閉編輯器來編輯提交消息。
Git 將更新我們的提交消息,然後完成其餘的變基指令。讓我們確認 Git 的工作:
$ git log -2
commit 421d446d77d4824360b516e2f274a7c5299d6498 (HEAD -> articles/BAEL-5627-how-to-modify-git-commit-message)
Author: baeldung <[email protected]>
Date: Tue Jun 21 22:04:56 2022 +0200
Adding file3
commit a6624ee55fdb9a6a2446fbe6c6fb8fe3bc4bd456
Author: baeldung <[email protected]>
Date: Tue Jun 21 22:02:59 2022 +0200
Adding file2
另外,請注意,這些提交的提交哈希已更改,就像我們之前修改過的提交一樣。我們所有的原始提交都已替換為新提交。
4. 推送你重寫的提交
此時,我們的分支上有三個提交:一個修改後的提交和兩個重新定位的提交。它們都具有與我們原始提交不同的提交哈希值。
只要原始提交沒有被推送到任何遠程倉庫,我們就可以正常推送。
但是,假設我們之前在替換之前推送了任何有缺陷的提交。在這種情況下,遠程存儲庫將拒絕我們的新推送,因為我們的本地提交歷史不再與存儲庫的歷史兼容。
因此,如果我們想要推送更正(但之前推送)的提交,我們將不得不使用force
選項:
$ git push --force
這個命令應該小心使用,因為它會用我們的更改覆蓋遠程分支,如果分支被其他人使用,這可能會導致問題。
5. 結論
在本文中,我們了解瞭如何編輯提交消息,無論是最後一條還是較舊的一條。我們還看到瞭如何將更改的提交推送到具有原始提交的存儲庫,並指出這應該小心完成。