我的问题:我愚蠢地对文件进行了很多更改并一次全部提交。
从那以后,我意识到很多变化都是废话……但其中很多也很好。
如何有选择地还原某些更改?
假设您此后没有提交任何其他内容,我将撤消您的提交, 添加您想要使用的文件的任何部分git add -p
,然后重新提交。
将较早的提交分解为部分是可行的git rebase -i
,但它只能用于您可以重写其历史的分支。操作顺序是这样的:
git rebase -i <commit>~1
<commit>
您要拆分的提交在哪里。在交互模式下,更改pick
为edit
或e
为您想要破坏的提交。然后关闭编辑器,让 rebase 继续。当rebase
到达受影响的提交时,它会暂停,允许您在那时进行任何您想要的编辑。这包括诸如git reset HEAD <file>
取消暂存<file>
、git reset HEAD
取消暂存所有内容以及git checkout -- <file>
丢弃工作目录中的更改之类的事情。
从这里,您可以按您喜欢的任何顺序提交更改。我建议git add -p
以交互方式添加补丁集,如果对同一文件的多次更改最好在多次提交上提交。
最后,当你在断裂的提交中提交了你想要的所有东西,并准备好让 rebase 继续时,只需发出git rebase --continue
.
如果您想避免重写历史记录,此答案将向您展示如何使用git revert --no-commit
仅还原部分提交。