1

假设我在本地对文件进行了一堆更改,然后将这些更改添加到暂存索引中,然后提交它们。然后我意识到,实际上,我犯了一些错误,我想快速撤消整个提交并回到我提交之前的位置(即,我的更改从存储库中取出并返回到索引中)。

我试图做一个git revert SHA,这确实撤消了我最近的提交,但它也完全覆盖了我的所有文件并将它们恢复到原来的状态。

如何在不覆盖我更改的情况下恢复提交?

4

1 回答 1

3

你正在寻找git reset --soft <last commit you want to keep>.

但是请注意,与 不同的是revert,这将撤消您指定的提交之后的所有提交(例如,如果您有A-B-C-D (HEAD)和 you 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)"
于 2013-06-11T15:27:54.787 回答