我的问题是:
我目前正在研究master分支。
我的同事将他的分支合并到了B的主人
然后我继续处理几个提交C,D,E
在那之后,我发现合并应该不存在。我想恢复合并但仍保留C,D,E
有任何建议???
此处示例:
0--A--B--C--D--E
/
G--H
这就是我想要的:
0--A--C--D--E
答案 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