Git撤消合并但不删除以后的提交

时间:2015-11-20 03:46:51

标签: git merge

我的问题是:
我目前正在研究master分支。
我的同事将他的分支合并到了B的主人 然后我继续处理几个提交C,D,E 在那之后,我发现合并应该不存在。我想恢复合并但仍保留C,D,E 有任何建议???

此处示例:

0--A--B--C--D--E
      /
  G--H

这就是我想要的:

0--A--C--D--E

1 个答案:

答案 0 :(得分:3)

还原

你应该可以做一个git revert:

git checkout master
git revert B -m <mainline>

其中mainline是一个整数,它定义了用作主分支的分支。您可以通过键入

轻松扣除使用哪一个
git log B

您应该看到类似的内容:

commit B
Merge: A H

如果您想要恢复为州1,则主线为A;如果您想恢复为州2,则主线为H

在这种情况下,你会写:

git revert B -m 1

这将创建一个删除B提交的新提交。您的历史现在看起来像:

0--A--B--C--D--E--F

F提交实际上是B的撤消。

git-revert manpage中所述,检查Revert a faulty merge How-To非常有用。

衍合

另一个选择是:

git checkout master
git rebase -i A

然而,这会改变你的git历史,可能不是你想要的,特别是如果其他人在同一个存储库上工作。

将弹出一个新的编辑器,例如:

pick A
pick G
pick H
pick C
pick D
pick E

你应该把它改成:

pick A
drop G
drop H
pick C
pick D
pick E

保存文件并退出编辑器以继续rebase过程。

您的历史记录现在应该是0--A--C--D--E

摘樱桃

或者你可以创建一个新的分支并挑选你想要的提交:

git checkout A
git checkout -b new-master
git cherry-pick C..E