1. 程式人生 > >git 修改commit的名字與撤回提交

git 修改commit的名字與撤回提交

當你不小心,寫錯了提交的注視/資訊,該如何處理呢。理論上,SCM是不應該修改歷史的資訊的,提交的註釋也是。 
  不過在git中,其commit提供了一個--amend引數,可以修改最後一次提交的資訊.但是如果你已經push過了,那麼其歷史最後一次,永遠也不能修改了。 
  我使用git commit --amend已經push過的,截圖如下,我那個"fixes #3"永遠的在版本歷史中了。

 git commit --amend

的用法,,,

# git commit --amend

然後在出來的編輯介面,直接編輯 註釋的資訊。。

===========================================================================================================

===========================================================================================================

git修改歷史提交

2011-06-16 17:58

       git使用amend選項提供了最後一次commit的反悔。但是對於歷史提交呢,就必須使用rebase了。

       git rebase -i HEAD~3

       表示要修改當前版本的倒數第三次狀態。

        這個命令出來之後,會出來三行東東:

        pick:*******

        pick:*******

        pick:*******

        如果你要修改哪個,就把那行的pick改成edit,然後退出。

        這時通過git log你可以發現,git的最後一次提交已經變成你選的那個了,這時再使用:

        git commit --amend

        來對commit進行修改。

        修改完了之後,要回來對不對?

        使用git rebase --continue

        OK,一切都搞定了。

==============================================================

Git修改前一次提交的方法(特別注意保持Change-Id不變)

2011年8月8日sinojelly發表評論閱讀評論

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

基本概念

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 -m “MSG”

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

方法三:只是修改作者

如果email不對,會無法提交到Gerrit,所以這個命令也可能用到。

git commit –amend –author=<user-email>

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

=========================================================

1. // 檢視修改

git rebase -i master~1 //最後一次
git rebase -i master~5 //最後五次

2. // 顯示結果如下,修改 pick 為 edit ,並 :wq 儲存退出

pick 92b495b 2009-08-08: ×××××××

# Rebase 9ef2b1f..92b495b onto 9ef2b1f
#
# Commands:
#  pick = use commit
#  edit = use commit, but stop for amending //改上面的 pick 為 edit
#  squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#


3. 命令列顯示:

Rebasing (1/1)
You can amend the commit now, with

git commit --amend


4. 使用 git commit --amend 進行修改,完成後 :wq 退出

5. 使用 git rebase --continue 完成操作