Jos*_*uss 20 git merge git-merge diff3
我正在与merge.conflictStyleset进行合并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.
Run Code Online (Sandbox Code Playgroud)
但是,我得到了一个更复杂的结果,有许多额外的行(见下文).我有一种感觉,这与我正在合并的提交的祖先中进行了大量合并这一事实有关,但我无法弄清楚额外的行是什么意思.我似乎也找不到这种行为的任何文档.
这是我得到的(编辑当然,以保护代码的身份).
(我试图合并的任何提交的代码中都没有冲突标记,所以这不是答案.)
<<<<<<< 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
Run Code Online (Sandbox Code Playgroud)
我相信这个问题也是同样的问题,但答案并没有解释任何其他与diff3有关的问题,提问者已经在标题中指出这是他/她熟悉的东西.我试过两次编辑这个问题,但遭到拒绝,所以我再次问它.
tor*_*rek 17
你在这里(与Temporary merge branch 12相同)是由于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);
Run Code Online (Sandbox Code Playgroud)
(merge-recursive.c,约1940年).当提交图具有多个合并库候选者时,Git将执行递归合并(有关更多信息,请参阅此博客文章).为了(过度?)简化一点,git完成了一个内部的递归合并,产生了合并冲突,然后完成了外部合并并遇到了另一个合并冲突.你看到的是外部合并冲突(oursvs theirs),内部冲突显示为"基础"版本.
你可能会发现,通过选择一些其他的合并策略,或使用替代DIFF算法(中取得更好的成绩patience,minimal和histogram算法VS默认myers).或者,您可能希望diff3稍微禁用样式,这样您就不会看到内部合并.