2011-09-06 121 views
3

我有幾個提交已經完成,我需要撤消最新的提交,但要對其進行更改。請建議如何做到這一點。謝謝。如何取消最新提交併保留更改?

+0

http://stackoverflow.com/questions/927358/git-undo-last-commit – simplyharsh

+0

爲什麼?你是否需要更改該提交(添加/刪除更改)? – Mat

+0

我需要更改註釋並添加一些其他文件。 – Eugene

回答

8
git reset --soft HEAD^ 

請注意,如果尚未推送HEAD,則只應回捲HEAD。


編輯在迴應原來的問題您的評論:

如果你只想要編輯最近的提交,Git有一個很棒的功能commit --amend。只需使用git add/git rm/git checkout,直到您的索引處於您希望的狀態(添加了新更改,刪除了一些更改,刪除了文件...)。然後使用git commit --amend,它會彈出vi(或者你在core.editor中配置的任何東西),並顯示上次提交的提交消息供您編輯。

請注意,當我說>編輯最近的提交<,Git實際上創建一個新的提交。所以,不這樣做,當提交已經從其他人拉(即推送到公共倉庫)

3

如果要更新最近提交,然後修改這個承諾會做的工作:

<do the changes you want to> 
git add <missing files> 
git add <changed files> 
git commit --amend 

就是這樣。

如果您需要更改註釋並將其他文件添加到之前的提交,我建議您改爲使用interactive rebase

<do the changes you want to> 
git add <missing files> 
git commit -a 
git rebase -i HEAD~3 

在彈出你會看到類似

pick <SHA1> Commit that you wanted to change 
pick <SHA2> Next commit that you seem to try to rollback in your question 
pick <SHA3> Just committed fixes to SHA1 

更改編輯器它是

pick <SHA1> Commit that you wanted to change 
f <SHA3> Just committed fixes to SHA1 
pick <SHA2> Next commit that you seem to try to rollback in your question 

( 'F' 表示 '修正' - 南瓜SHA1 ANS SHA3並丟棄SHA3的提交消息之一)

保存更改,退出編輯器。你完成了。

對於已經推送到上游的提交,不應該這樣做。

+0

'previous'和'most recent' commit有什麼區別?我沒看出任何區別。 – Eugene

+1

最近的提交是當前的提交(即分支的頭)。以前的提交是當前的提交。 – mgautierfr

+0

是的,抱歉在這裏模棱兩可。在我的術語中,「最近的」是「HEAD」,「前一個」是'HEAD'。 –

相關問題