3

我的问题:我愚蠢地对文件进行了很多更改并一次全部提交。

从那以后,我意识到很多变化都是废话……但其中很多也很好。

如何有选择地还原某些更改?

4

3 回答 3

3

假设您此后没有提交任何其他内容,我将撤消您的提交添加您想要使用的文件的任何部分git add -p,然后重新提交。

于 2012-07-30T20:34:10.400 回答
2

将较早的提交分解为部分是可行的git rebase -i,但它只能用于您可以重写其历史的分支。操作顺序是这样的:

git rebase -i <commit>~1

<commit>您要拆分的提交在哪里。在交互模式下,更改pickedite为您想要破坏的提交。然后关闭编辑器,让 rebase 继续。当rebase到达受影响的提交时,它会暂停,允许您在那时进行任何您想要的编辑。这包括诸如git reset HEAD <file>取消暂存<file>git reset HEAD取消暂存所有内容以及git checkout -- <file>丢弃工作目录中的更改之类的事情。

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

最后,当你在断裂的提交中提交了你想要的所有东西,并准备好让 rebase 继续时,只需发出git rebase --continue.

如果您想避免重写历史记录,此答案将向您展示如何使用git revert --no-commit仅还原部分提交。

于 2012-07-30T20:39:35.840 回答
0

在此处输入图像描述当您在一些 IDE(如 netbeans)中打开文件时,您可以实时看到所有更改,就像每行开头的颜色代码一样。右键单击其中一个颜色标记会显示之前的内容。右键单击的上下文菜单还允许您仅撤消对文件的那部分更改。因为您已经提交了更改,所以您可以git reset soft HEAD^在 netbeans 中执行然后打开文件,有选择地撤消更改,然后执行git commit.

有人知道如何在emacs中做到这一点吗?(这就是我看到这篇文章时正在寻找的东西。)

于 2017-01-29T20:46:50.720 回答