1. 程式人生 > >修改git commit 除了 git commit --amend 還有 git commmit rebase, reset,

修改git commit 除了 git commit --amend 還有 git commmit rebase, reset,

如果發現上一次提交的內容存在問題,就需要修改了。

基本概念

Change: Gerrit中的一個Change就是一個Review任務,它對應一個commit。 每個commit,應該是為了一個目的的完整修改。如果某一次修改不完全,就需要修正該commit。 每一次修正之前的commit,重新提交時,都應該保持Change-Id不變,這樣就不會產生新的Change,而是在原有的Change下產生一個新的Patch Set。 所有的Patch Set中,只有最新的一個是真正有用的,能夠合併的。

圖1:Change和Change-Id

圖2:Patch Set

修改前一次提交的方法

方法一:用–amend選項

#修改需要修改的地方。
git add .
git commit 
amend

注:這種方式可以比較方便的保持原有的Change-Id,推薦使用

方法二:先reset,再修改

這是可以完全控制上一次提交內容的方法。但在與Gerrit配合使用時,需特別注意保持同一個commit的多次提交的Change-Id是不變的。 否則,就需要Abondon之前的Change,產生一些垃圾不說,操作得不對,會使得簡單的事情複雜化,甚至無法合併。 git reset HEAD^
#重新修改
git add .
git commit -“MSG”

特別注意:為了保持提交到Gerrit的Change不變,需要複製對應的Change-Id到commit msg的最後,可以到Gerrit上對應的Change去複製,參見圖1。

方法三:只是修改作者

如果email不對,會無法提交到Gerrit,所以這個命令也可能用到。 git commit amend author=<user-email>

注:如果該email地址從未有過成功的提交,這個修改會不成功。在別的分支做一次成功提交之後,就可以修改了。