如何选择性地将单次提交中的某些更改还原为单个文件?
我的问题:我愚蠢地对文件进行了很多更改,并一次性完成所有更改。
我已经意识到,许多变化都是废话......但其中很多变化都很好。
我如何有选择地还原某些部分的更改?
假设你还没有承诺任何其他事情,我会撤销你的提交,使用git add -p
你想要的文件的任何部分,然后重新提交。
我很确定这应该起作用
使用git rebase -i
将早期的提交分解成部分是可行的,但它只能用于可以重写其历史记录的分支。 操作顺序如下所示:
git rebase -i <commit>~1
其中<commit>
是您想要分离的提交。 在交互模式,改变pick
到edit
或e
您要断裂的承诺。 然后关闭编辑器并让rebase继续。 当rebase
达到受影响的提交时,它会暂停,允许您在该点进行任何编辑。 这包括像git reset HEAD <file>
到unstage <file>
, git reset HEAD
以取消所有内容, git checkout -- <file>
放弃工作目录中的更改。
从这里开始,您可以按照您的任何顺序进行修改。 如果对多个提交最好提交同一文件的多个更改,我建议git add -p
交互添加补丁集。
最后,当你在分裂的提交中犯下了所有你想要的,并准备好让rebase继续的时候,只需发出git rebase --continue
。
如果你想避免重写历史,这个答案告诉你如何使用git revert --no-commit
来恢复git revert --no-commit
部分内容。
当你在NetBeans等一些IDE中打开一个文件时,你可以看到所有的变化,就像每行开头的颜色代码一样。 右键单击其中一个颜色标记可以显示您以前的情况。 右键单击的上下文菜单还可以让您只撤销文件更改的那部分内容。 由于您已经提交了更改,因此可以执行git reset soft HEAD^
,然后在netbeans中打开文件,选择性地撤消更改,然后执行git commit
。
有人知道如何在emacs中做到这一点? (这是我遇到这篇文章时所寻找的。)
链接地址: http://www.djcxy.com/p/4189.html上一篇: How do I selectively revert some changes in a single commit to a single file?