我正在与设置为merge.conflictStyle
的{{1}}进行合并。通常,这会插入由四(4)组字符分隔的三(3)个部分。
Git Documentation for Merge清楚地解释了这些符号对于一个简单案例的含义(如下所述)。
常规diff3:
diff3
然而,我得到了更复杂的结果,有许多额外的线(见下文)。我有一种感觉,这与我正在合并的提交的祖先中进行了大量合并这一事实有关,但我无法弄清楚额外的行是什么意思。我似乎也找不到这种行为的任何文档。
这是我得到的(当然是编辑,以保护代码的身份)。
(我尝试合并的任何提交的代码中都没有冲突标记,所以这不是答案。)
Here are lines that are either unchanged from the common ancestor, or cleanly resolved because only one side changed.
<<<<<<< yours:sample.txt
Conflict resolution is hard;
let's go shopping.
|||||||
Conflict resolution is hard.
=======
Git makes conflict resolution easy.
>>>>>>> theirs:sample.txt
And here is another line that is cleanly resolved or unmodified.
我相信this question也在问同样的事情,但答案并没有解释任何与diff3有关的事情,提问者已经在标题中指出他/她熟悉的事情用。我曾尝试两次编辑这个问题,但遭到拒绝,所以我再次问它。
答案 0 :(得分:16)
你在这里(Temporary merge branch 1
与2相同)是由于git的“递归合并”方法:
o->branch1 = "Temporary merge branch 1";
o->branch2 = "Temporary merge branch 2";
merge_recursive(o, merged_common_ancestors, iter->item,
NULL, &merged_common_ancestors);
(merge-recursive.c
,1940年左右)。当提交图具有多个合并库候选者时,Git将执行递归合并(有关更多信息,请参阅this blog post)。为了(过度?)简化一点,git完成了一个内部的递归合并,产生了合并冲突,然后完成了外部合并并遇到了另一个合并冲突。你看到的是外部合并冲突(ours
vs theirs
),内部冲突显示为“基础”版本。
您可能会发现通过选择其他合并策略或使用其他差异算法(patience
,minimal
和histogram
算法与默认{{{{{ 1}})。或者,您可能希望稍微禁用myers
样式,这样您就不会看到内部合并。