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

时间:2012-07-30 20:26:01

标签: git revert

我的问题:我愚蠢地对文件做了很多更改并立即将它们全部提交。

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

如何有选择地还原部分更改?

3 个答案:

答案 0 :(得分:2)

假设您之后没有提交任何其他内容,我会undo your commitadd whatever parts of the file you want using git add -p,然后重新发送。

我很确定这应该有效

答案 1 :(得分:2)

使用git rebase -i可以将先前的提交分成几部分,但它只能用于可以重写其历史记录的分支。操作顺序如下:

git rebase -i <commit>~1

<commit>是您想要拆分的提交。在交互模式下,将pick更改为edite以进行您想要破解的提交。然后关闭编辑器并让rebase继续。当rebase到达受影响的提交时,它会暂停,允许您在此时进行任何您想要的修改。其中包括git reset HEAD <file>取消暂停<file>git reset HEAD取消所有内容,git checkout -- <file>放弃工作目录中的更改。

从这里,您可以按自己喜欢的任何顺序提交更改。如果对多个提交最佳地提交对同一文件的多个更改,我建议git add -p以交互方式添加补丁集。

最后,当你在破碎的提交中提交了你想要的所有内容,并准备让rebase继续时,只需发出git rebase --continue

如果您想避免重写历史记录,this answer会向您展示如何使用git revert --no-commit来恢复部分提交。

答案 2 :(得分:0)

enter image description here当你在netbeans等某些IDE中打开一个文件时,你可以看到所有的变化,就像每行开头的颜色代码一样。右键单击其中一个颜色标记可显示之前的颜色标记。右键单击上下文菜单还允许您仅撤消对文件所做更改的部分。由于您已提交更改,因此可以执行git reset soft HEAD^,然后在netbeans中打开文件,有选择地撤消更改,然后执行git commit

有人知道如何在emacs中执行此操作吗? (当我遇到这篇文章时,这就是我所寻找的。)