Почему для слияния нужно, чтобы вы считали общего предка?

Я изучаю 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 могло произойти несколько коммитов с внесением и удалением изменений.

3 ответа

Решение

Это просто потому, что слияние работает лучше, если вы знаете общего предка. Смотрите этот ответ, у него есть хорошее объяснение, почему.

(Я стесняюсь спросить, если это апрельский дурак, я не хочу никого оскорблять...)

Может быть, вы не понимаете, что это мерзавец делает слияние для вас?

Вопрос: Вот 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 может справиться с этим самостоятельно.

Не знаю, если это отвечает на ваш вопрос...

В Википедии есть хорошее введение в трехстороннее слияние

Другие вопросы по тегам