如何选择性地将单次提交中的某些更改还原为单个文件?

我的问题:我愚蠢地对文件进行了很多更改,并一次性完成所有更改。

我已经意识到,许多变化都是废话......但其中很多变化都很好。

我如何有选择地还原某些部分的更改?


假设你还没有承诺任何其他事情,我会撤销你的提交,使用git add -p你想要的文件的任何部分,然后重新提交。

我很确定这应该起作用


使用git rebase -i将早期的提交分解成部分是可行的,但它只能用于可以重写其历史记录的分支。 操作顺序如下所示:

git rebase -i <commit>~1

其中<commit>是您想要分离的提交。 在交互模式,改变pickedite您要断裂的承诺。 然后关闭编辑器并让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?

下一篇: git: can't create upstream branch