如何在Git中合并两个分支,但保留两者的所有差异并手动解决冲突

时间:2019-06-17 18:59:58

标签: git merge

所以我的git分支设置如下:

      -------- A
    /           \
master -------- master
    \
      --------------------B

如图所示,我同时从master分支了A和B,然后将A合并回master并删除了分支A。在分支A上,我删除了仍然存在于分支B上的一些代码。例如,On我有分支主管(仅作为示例):

class Eg {
  int a;
}

在B分支上,我有:

class Eg {
  unsigned int b;
}

这是我分支A和B之前master上已经存在的东西。

此后,我意识到我需要两者,即我需要:

class Eg {
  int a;
  unsigned int b;
}

当我尝试将master合并到B中时,我最终会丢失unsigned int B(因为分支B位于master后面以更改该部分)。有没有办法阻止两者的更改,并手动解决所有问题?即,合并后,最终显示为:

class Eg {
<<<
  int a;
===
  unsigned int b;
>>>
}

在分支B上,并手动解决所有这些问题?我需要分支A / master的所有更改,以及我在分支A上重写的较旧版本的master的一些更改,这些更改仍存在于分支B上(并且我需要在分支B上进行所有更改,因为我已经从主)。我意识到这很麻烦,所以我不介意手动解决所有问题(A上的更改很小,可以手动解决冲突)。

2 个答案:

答案 0 :(得分:0)

正在破坏您的更改来自A ....,以便优雅地进行更正,在合并之前,您可以将行添加到master ....,也可以还原(在主版本上)在A上更改该行的修订(如果该修订上没有其他更改)...或者您可以签出A(即使该分支不存在,也没有关系),添加该行,然后再次合并为master。...无论如何,让master具有您可能在工作流程中使用的任何技巧的内容):

class Eg {
  int a;
  unsigned int b;
}

然后,当您合并B时,您将在那里得到想要的东西。

答案 1 :(得分:0)

我假设进行合并时,有不止一件小事消失了,所以简单地进行合并并更正问题可能不是最佳方法。话虽这么说,另一种方法可能是克隆存储库的第二个副本,以便您拥有B和master的文件,然后使用Beyond Compare之类的工具手动合并两个分支并保存这些更改。在您没有更改的副本上(假设它将是分支B已签出的副本)进行合并,然后您可以将更改与分支B进行比较。这不是一个很好的解决方案,但是如果您有一些复杂的更改并且有很多文件,这可能是值得的。