Amalgamate两人在Git中合并

时间:2014-06-02 14:38:12

标签: git version-control merge rebase

我有一个Git分支,它是一个显示项目topic的{​​{1}}分支。我将它与主服务器合并,并手动解决了冲突。之后,master修复了一个关键错误,我再次合并,这次没有冲突。我没有在两个合并之间做任何事情,我没有把分支推到其他任何人。我想结合两个合并。

我现在拥有的是:

master

其中:

  • X是修复冲突的合并
  • C是对主人的重要错误修复
  • Y是包含此修复的合并

我想把它变成:

master ----A---B-----C---------->
                \     \
topic   ---W-----X-----Y-------->

其中X'现在是在单个合并提交中合并冲突解决方案和错误修复的合并。

我知道我可以通过检查W并合并master ----A---B---C-----------> \ topic ----W---------X'--------> 并在不可避免的冲突期间从X复制已解析文件的内容来手动执行此操作。是否有更快的方法可以减少搞乱的可能性(在冲突大而丑的情况下)?

3 个答案:

答案 0 :(得分:1)

更快?

git checkout topic
git rebase -i W

然后你可以压缩最后两次提交。

git merge -ours master

(再次记录mastertopic之间的合并,而不必“重做”合并)

您还可以尝试使用-p--preserve-merge)选项,以保留主和主题之间的合并链接

git rebase -p -i W

答案 1 :(得分:1)

如果你真的没有推过任何东西,至少W,那么这可能是最简单的方法(在实际的冲突解决之外 - 这可能是痛苦的,我猜)来实现它:

git checkout topic
git reset --hard W
git merge master

如果您从W开始推送,(特别是如果XY存在于您的存储库之外的任何地方),我不确定是否有一个干净的解决方案 - 无论您做什么,都会对其中包含XY的任何其他存储库造成问题。

当然,除非您启用了rerere,否则您必须重新进行冲突解决。

答案 2 :(得分:0)

很确定你可以在这里做git rebase origin/master ..

另一点是分支机构很便宜。为什么不创建一个单独的克隆你的topictopic',然后操纵他,最后你可以在它和topic之间做一个差异来证明你自己没有改变了任何东西(只提交历史记录已经改变)