[git] 已經push的commit如何修改message

背景

在使用git提交代碼的時候,可能會出現message寫錯的狀況,
若是此時commit已經push到遠程服務器了,
修改起來就比較麻煩了。git

下面整理了一下,修改歷史中某幾回commit的message的通用辦法。服務器

命令

如下修復方式中,總共涉及這些命令,spa

$ git log
$ git rebase -i HEAD~5
$ git commit --amend
$ git rebase --continue
$ git push -f

注:
在修復歷史commit message的時候,請確保當前分支是最新代碼,
且已經提交了全部本地修改。code

步驟

1. 使用git log命令查看歷史記錄

$ git log

如圖,提交記錄會按時間倒序展現,事件

 

 

2. 使用git rebase -i HEAD~5肯定要修改哪些commit

$ git rebase -i HEAD~5

其中,HEAD~5表示最近的5個,後面的5能夠改爲其餘數字。
本例中咱們只顯示最近的5個。it

 

咱們看到上面顯示了5行,ast

pick 1d316b0 1
pick f429786 2
pick 880cfbc 3
pick c55cf56 4
pick d10fd07 5

 

左邊第一列表示命令(command),中間一列表示commit id,
最右邊一列是咱們以前提交的message。test

這裏的展現順序,是按事件順序排列的。
即,第一行是最先提交的信息。sed

假設咱們須要修改第2條和第4條commit的message,
則須要將它們的命令(command),由pick改成edit
其它地方保持不變(此時還不用修改message)。date

修改完成以後,保存修改。

pick 1d316b0 1
edit f429786 2  <- 注意本行第一列的pick改成edit了
pick 880cfbc 3
edit c55cf56 4  <- 注意本行第一列的pick改成edit了
pick d10fd07 5

3. 輪流使用git commit --amendgit 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已經被咱們成功修改了。

相關文章
相關標籤/搜索