2013-06-11 53 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)"