【问题标题】:Git revert is overwriting my filesGit revert 正在覆盖我的文件
【发布时间】:2013-06-07 12:37:37
【问题描述】:
假设我在本地对文件进行了一堆更改,然后将这些更改添加到暂存索引中,然后提交它们。然后我意识到,实际上,我犯了一些错误,我想快速撤消整个提交并回到我提交之前的位置(即,我的更改从 repo 中返回并返回到索引中)。
我尝试执行git revert SHA,这确实撤消了我最近的提交,但它也完全覆盖了我的所有文件并将它们恢复到原始状态。
如何在不覆盖更改的情况下还原提交?
【问题讨论】:
标签:
git
commit
git-reset
git-revert
【解决方案1】:
您正在寻找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)"