[git] 已經push的commit如何修改message
背景
在使用git提交程式碼的時候,可能會出現message寫錯的情況,
如果此時commit已經push到遠端伺服器了,
修改起來就比較麻煩了。
下面整理了一下,修改歷史中某幾次commit的message的通用辦法。
命令
以下修復方式中,總共涉及這些命令,
$ git log $ git rebase -i HEAD~5 $ git commit --amend $ git rebase --continue $ git push -f
注:
在修復歷史commit message的時候,請確保當前分支是最新程式碼,
且已經提交了所有本地修改。
步驟
1. 使用git log
命令檢視歷史記錄
$ git log
如圖,提交記錄會按時間倒序展示,
2. 使用git rebase -i HEAD~5
確定要修改哪些commit
$ git rebase -i HEAD~5
其中,HEAD~5
表示最近的5個,後面的5
可以改成其他數字。
本例中我們只顯示最近的5個。
我們看到上面顯示了5行,
pick 1d316b0 1 pick f429786 2 pick 880cfbc 3 pick c55cf56 4 pick d10fd07 5
左邊第一列表示命令(command),中間一列表示commit id,
最右邊一列是我們之前提交的message。
這裡的展示順序,是按事件順序排列的。
即,第一行是最早提交的資訊。
假設我們需要修改第2條和第4條commit的message,
則需要將它們的命令(command),由pick
改為edit
,
其它地方保持不變(此時還不用修改message)。
修改完成之後,儲存修改。
pick 1d316b0 1 edit f429786 2 <- 注意本行第一列的pick改為edit了 pick 880cfbc 3 edit c55cf56 4 <- 注意本行第一列的pick改為edit了 pick d10fd07 5
3. 輪流使用git commit --amend
和git rebase --continue
修改每個edit的commit
儲存完了之後,git的分支就會發生改變,
從原來的master改成了我們第一個edit的commit id,
$ test-rebase git:(master) >
$ test-rebase git:(f429786) >
下面我們在這個commit id所示的分支上,執行,
$ git commit --amend
此時就可以修改message了,我們可以改成2a
,
2a
# Please enter the commit message for your changes. Lines starting
...
對修改進行儲存,然後執行,
$ git rebase --continue
現在分支號又發生了改變,表示我們要對第二個標記為edit的commit進行修改,
值得注意的是,這裡的分支號和需要edit的commit id並不相同。
$ test-rebase git:(be83ef5) >
接著再重複上面的操作,
先用git commit --amend
修改message,然後儲存,
再執行,git rebase --continue
。
我們標記了幾個edit,這個過程就需要重複執行幾次。
全部修改完成後,會提示,
> Successfully rebased and updated refs/heads/master.
4. 使用git push -f
強制更新遠端伺服器
$ git push -f
切記一定要加-f
,否則我們edit的commit會新增到commit後面,
而不是更新原commit。
更新完之後,我們來看看git log
。
第2條和第4條commit message已經被我們成功修改了。
作者:何幻
連結:https://www.jianshu.com/p/ec45ce13289f
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授