26

merge.conflictStyleに設定してマージを行っていdiff3ます。通常、これにより、4 セットの文字で区切られた 3 つのセクションが挿入されます。

MergeのGit ドキュメントでは、これらの記号が単純なケースで何を意味するかを明確に説明しています (後述)。

通常の差分 3:

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と関係があることを説明していません。その質問を2回編集しようとしましたが、拒否されたので、もう一度質問します。

4

1 に答える 1

21

ここにあるもの ( 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);

( merge-recursive.c、1940年頃)。コミット グラフにマージ ベースの候補が複数ある場合、Git は再帰的なマージを実行します (詳細については、このブログ投稿を参照してください)。少し (過度に?) 単純化するために、git は内部の再帰的なマージを実行してマージの競合が発生し、次に外部のマージを実行して別のマージの競合に遭遇しました。表示されるのは、外側のマージ競合 ( oursvs theirs) と、「ベース」バージョンとして表示される内側の競合です。

他のマージ戦略を選択するか、別の diff アルゴリズム ( 、 、およびアルゴリズムとデフォルトの ) を使用すると、より良い結果が得られる場合patienceminimalありhistogramますmyers。または、スタイルを少し無効にして、内部マージが表示diff3されないようにすることもできます。

于 2015-07-13T20:41:02.150 に答える