Git - diff3冲突风格 - 临时合并分支

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,minimalhistogram算法VS默认myers).或者,您可能希望diff3稍微禁用样式,这样您就不会看到内部合并.