修改 git repo 歷史提交的 author

syrchina發表於2018-08-30

 最近學到了 git 的一招對我來說的新技巧:修改歷史提交的 author。

起因是這樣的,在某天提交程式碼的過程中,發現有幾次歷史提交的 author 資訊不對,可能是 user.name 和 user.email 的資訊被修改了,就像下面這樣:

git_update_author_1

其實也沒有大不了,但對於像我這種有輕微強迫症的人來說,這是不可接受的。

通過網上查詢,綜合了各種方法,最終實現了預期中的效果,如下所示:

git_update_author_2

簡要步驟


使用 git rebase -i HEAD~n 命令,表示要修改前 n 次所有的提交。這裡的示例工程,author 資訊最早開始出錯的那次提交出現在 HEAD~3 節點之後,因此這裡的 n 為 3,所以使用 git rebase -i HEAD~3-i中的 i 是 interactive,互動的意思。

輸入此命令後,顯示以下結果:

pick ac0fcc6 add file2
pick a0cbfbe add file3
pick 16ee6eb add file4

# Rebase d57f11f..16ee6eb onto d57f11f (3 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell

我們要修改第二行和第三行的提交,根據提示,因此把第二行和第三行的 pick 改成 edit 或 e,儲存退出。

儲存上面的修改並退出後,git 會依次執行上面的操作,當操作為 pick 時,直接 commit。當操作為 edit 時,會中斷,並提示以下資訊:

You can amend the commit now, with

    git commit --amend 

Once you are satisfied with your changes, run

    git rebase --continue

這裡的意思是說,你可以使用 git commit --amend 來修改此次提交,修改以後,覺得滿意了,執行 git rebase --continue 繼續剩下的流程。

由於我們的主要目的是修改提交者的資訊,因此光用 git commit --amend 是不夠的,我們要使用 git commit --amend --author "baurine <2008.hbl@gmail.com>" 這樣的操作,這一點是修改提交者資訊的關鍵所在。

使用上面的命令成功修改此次提交的提交者資訊後,一定要記得執行 git rebase --continue 繼續。

最終完成以後提示如下:

$ git rebase --continue
Successfully rebased and updated refs/heads/master.

 

Baurine

 

轉自:http://baurine.github.io/2015/08/22/git_update_author.html

相關文章