2013-06-11 77 views
1

假設我在本地對文件進行了一系列更改,然後將這些更改添加到分段索引中,然後提交它們。然後我意識到,實際上,我犯了一些錯誤,我想快速撤銷整個提交,並在我承諾之前回到我正確的位置(即將我的更改退出回購並返回索引)。Git還原覆蓋我的文件

我試圖做一個git revert SHA這確實取消了我最近的提交,但它也完全覆蓋了我所有的文件,並將它們恢復到原始狀態。

如何在不覆蓋我的更改的情況下恢復提交?

回答

3

您正在尋找git reset --soft <last commit you want to keep>

不過請注意,不像revert,這將一前一後撤消所有提交的指定(例如,如果你有A-B-C-D (HEAD)git reset --soft B,既CD將被撤消,既有的留在指數的變化) 。


當然,另一種選擇是不撤銷上次提交,而只是修改它以擺脫錯誤。你可以通過git commit --amend這樣做,它的作用就像git commit一樣,除了不是創建一個新的提交,而是修改(修改)最新的現有提交。

git commit -m "this commit has mistake(s)" 
...edit the file(s) with mistake(s)... 
git add <file> 
git commit --amend -m "same commit, no mistake(s)"