我正在与设置为merge.conflictStyle的diff3进行合并。通常,这会插入由四(4)组字符分隔的三个(3)段。
用于合并的Git文档清楚地解释了这些符号对于简单情况意味着什么(如下所述)。
正则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.然而,我得到了一个更复杂的结果与许多额外的行(见下文)。我有一种感觉,这与我在我目前正在合并的提交的祖先中进行了多次合并有关,但我不知道这些额外的行意味着什么。我似乎也找不到任何关于这种行为的文档。
这里是我得到的(当然,编辑,以保护代码的身份)。
(在我试图合并的任何提交的代码中都没有冲突标记,所以这不是答案。)
<<<<<<< ours
||||||| base
<<<<<<< Temporary merge branch 1
||||||| merged common ancestors
if (sendRedirect(result))
return new Result("redirect");
=======
if ( result.getId() != null )
{
object = new SomeObject(searchResult.getId()) ;
}
if (sendRedirect(result)){
return new Result("redirect");
}
>>>>>>> Temporary merge branch 2
=======
if ( result.getId() != null )
{
object = new SomeObject(searchResult.getId()) ;
}
>>>>>>> theirs我相信这个问题是在问同样的问题,但答案并没有解释它与diff3有什么关系,提问者已经在标题中指出他/她熟悉的东西。我试着编辑了两次这个问题,但是被拒绝了,所以我再问一次。
发布于 2015-07-13 20:41:02
您在这里所拥有的(使用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将执行递归合并(更多信息请参见这篇博客文章 )。要简化一点,git已经完成了内部递归合并,这会产生合并冲突,然后执行外部合并并触发另一个合并冲突。您看到的是外部合并冲突(ours vs theirs),内部冲突显示为“基本”版本。
您可能会发现,通过选择其他合并策略或使用替代的diff算法( patience、minimal和histogram算法相对于默认的myers),可以获得更好的结果。或者,您可能需要稍微禁用diff3样式,这样就看不到内部合并了。
https://stackoverflow.com/questions/31392513
复制相似问题