假设我在本地对文件进行了一堆更改,然后将这些更改添加到暂存索引中,然后提交它们。然后我意识到,实际上,我犯了一些错误,我想快速撤消整个提交并回到我提交之前的位置(即,我的更改从存储库中取出并返回到索引中)。
我试图做一个git revert SHA
,这确实撤消了我最近的提交,但它也完全覆盖了我的所有文件并将它们恢复到原来的状态。
如何在不覆盖我更改的情况下恢复提交?
假设我在本地对文件进行了一堆更改,然后将这些更改添加到暂存索引中,然后提交它们。然后我意识到,实际上,我犯了一些错误,我想快速撤消整个提交并回到我提交之前的位置(即,我的更改从存储库中取出并返回到索引中)。
我试图做一个git revert SHA
,这确实撤消了我最近的提交,但它也完全覆盖了我的所有文件并将它们恢复到原来的状态。
如何在不覆盖我更改的情况下恢复提交?
你正在寻找git reset --soft <last commit you want to keep>
.
但是请注意,与 不同的是revert
,这将撤消您指定的提交之后的所有提交(例如,如果您有A-B-C-D (HEAD)
和 you git reset --soft B
,两者都C
将D
被撤消,它们的两个更改都留在索引中)。
当然,另一种选择是不撤消您的上一次提交,而只是修改它以消除错误。您可以通过 来执行此操作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)"