1
假设我在本地对文件进行了一系列更改,然后将这些更改添加到分段索引中,然后提交它们。然后我意识到,实际上,我犯了一些错误,我想快速撤销整个提交,并在我承诺之前回到我正确的位置(即将我的更改退出回购并返回索引)。Git还原覆盖我的文件
我试图做一个git revert SHA
这确实取消了我最近的提交,但它也完全覆盖了我所有的文件,并将它们恢复到原始状态。
如何在不覆盖我的更改的情况下恢复提交?
假设我在本地对文件进行了一系列更改,然后将这些更改添加到分段索引中,然后提交它们。然后我意识到,实际上,我犯了一些错误,我想快速撤销整个提交,并在我承诺之前回到我正确的位置(即将我的更改退出回购并返回索引)。Git还原覆盖我的文件
我试图做一个git revert SHA
这确实取消了我最近的提交,但它也完全覆盖了我所有的文件,并将它们恢复到原始状态。
如何在不覆盖我的更改的情况下恢复提交?
您正在寻找git reset --soft <last commit you want to keep>
。
不过请注意,不像revert
,这将一前一后撤消所有提交的指定(例如,如果你有A-B-C-D (HEAD)
你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)"