3

私は Git を学んでおり、このサイトのチュートリアルが非常に役立つと感じています。そのページには、マージに関して、次のものが含まれています。

         +---------- (D) ---------------+
        /             |                  \
(A) -- (B) -- (C) -------------- (E) -- (F)
                      |                  |
                 fix-headers           master
                                         |
                                        HEAD

マージコミットは (F) で、親 (D) と (E) があります。(B) は (D) と (E) の共通の祖先であるため、(F) のファイルには (B) と (D) の間の変更、つまり (E) のファイルに組み込まれた見出しの修正が含まれている必要があります。

共通の祖先 B について心配する理由がわかりません。D と E をマージして F を生成できないのはなぜですか? D は B から派生したものですが、必要な違いが含まれている可能性があります。B と D の間で多くのコミットが行われ、変更が行われて削除された可能性があります。

4

3 に答える 3

4

(これがエイプリルフールかどうかを尋ねるのを躊躇します。誰かを侮辱したくありません...)

これが git がマージ行っていることを理解していないのではないでしょうか?

質問: ここに D と E があります。F はどのように見えるべきか教えていただけますか?

D                                        E
using System;                            using System;
public void main()                       public void main()
{                                        {
     Console.WriteLine("hello world");        Console.WriteLine("Hello world!");
}                                        }

回答: いいえ、できません

ただし、B が次のようになっていることがわかっている場合:

B
using System;
public void main()
{
     Console.WriteLine("hello world");
}

それは非常に簡単になり、git はこれを単独で処理できます。

それがあなたの質問に答えているかどうかはわかりません...

于 2011-04-01T13:16:34.297 に答える
2

これは単純に、共通の祖先を知っているとマージがうまく機能するためです。この回答を参照してください。理由がよく説明されています。

于 2011-04-01T12:30:41.097 に答える
1

ウィキペディアには、3方向マージに関する優れた紹介があります

于 2011-04-01T12:15:25.530 に答える