如何修改 Git 提交消息

海擁科技 發佈 2022-06-28T10:58:58.943779+00:00

修改最近的提交信息。這將在您的機器上打開與 Git 關聯的文本編輯器, 並在編輯器中填充可在變基過程中使用的所有命令,包括:正如我們所看到的,我們可以在 rebase 提交時做各種事情,比如通過squash命令將兩個提交合併為一個。

一、概述

在本教程中,我們將了解如何修改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 <baeldung@baeldung.com>
Date: Tue Jun 21 21:53:12 2022 +0200

 Ading file1

為了修正錯字,我們將使用修正選項:

$ 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 <baeldung@baeldung.com>
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 <baeldung@baeldung.com>
Date: Tue Jun 21 22:04:56 2022 +0200

 Adding file3

commit ffb7a68bf63c7da9bd0b261ebb9b2ca548aa1333
Author: baeldung <baeldung@baeldung.com>
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時。

讓我們將第一行改為使用reword命令而不是pick命令;我們將選擇第二次提交,因為我們希望保持該消息原樣:

reword ffb7a68bf6 Ading file2
pick 517193e1e9 Adding file3

如果我們想在一個 rebase 中更改兩條消息,我們可以簡單地將兩行的命令更改為reword

現在,我們還沒有更改提交消息。所以讓我們保存我們的文件並關閉文本編輯器,它讓 Git 知道我們已經完成了我們的變基指令。

Git 現在將處理變基命令,在需要我們交互時提示我們。由於我們告訴 Git重寫第一次提交,它會用第一次提交的內容重新打開文本編輯器。第一行包含提交消息:

Ading file2

以下幾行的注釋描述了改寫操作的工作方式。

讓我們通過將第一行修改為「Adding file2」、保存文件並關閉編輯器來編輯提交消息。

Git 將更新我們的提交消息,然後完成其餘的變基指令。讓我們確認 Git 的工作:

$ git log -2
commit 421d446d77d4824360b516e2f274a7c5299d6498 (HEAD -> articles/BAEL-5627-how-to-modify-git-commit-message)
Author: baeldung <baeldung@baeldung.com>
Date: Tue Jun 21 22:04:56 2022 +0200

 Adding file3

commit a6624ee55fdb9a6a2446fbe6c6fb8fe3bc4bd456
Author: baeldung <baeldung@baeldung.com>
Date: Tue Jun 21 22:02:59 2022 +0200

 Adding file2

另外,請注意,這些提交的提交哈希已更改,就像我們之前修改過的提交一樣。我們所有的原始提交都已替換為新提交。

4. 推送你重寫的提交

此時,我們的分支上有三個提交:一個修改後的提交和兩個重新定位的提交。它們都具有與我們原始提交不同的提交哈希值。

只要原始提交沒有被推送到任何遠程倉庫,我們就可以正常推送。

但是,假設我們之前在替換之前推送了任何有缺陷的提交。在這種情況下,遠程存儲庫將拒絕我們的新推送,因為我們的本地提交歷史不再與存儲庫的歷史兼容。

因此,如果我們想要推送更正(但之前推送)的提交,我們將不得不使用force選項:

$ git push --force

應該小心使用這個命令,因為它會用我們的更改覆蓋遠程分支,如果該分支被其他人使用,這可能會導致問題。

5. 結論

在本文中,我們了解了如何編輯提交消息,無論是最後一條還是較舊的一條。我們還看到了如何將更改的提交推送到具有原始提交的存儲庫,並指出這應該小心完成。

關鍵字: