Почему это слияние работает нормально (добавить новый файл), а перебазирование привело к конфликту? - PullRequest
1 голос
/ 27 июня 2019

merge vs rebase

commit b2e01e2 добавил новый файл, при слиянии его с основной веткой в ​​4dee649 он работает просто отлично, новый файл был добавлен.

В то время как rebase b2e01e2 в основную ветвь приведет к конфликту в другом файле.

Предыдущее слияние коммита 84b064f с основной веткой при коммите 7f5db59 действительно вызвало конфликт в этом файле, и оно было разрешено в 7f5db59 .

Я проверил обсуждение на Является ли слияние без конфликтов эквивалентным перебазированию без конфликтов? . Но проблема в том, что в перебазированной ветке файл конфликтовал с другим файлом в основной ветке, что не в моем случае.

Это обсуждение Git: Почему перебазировка приводит к конфликтам, а слияние нет? говорит: «Возможно, что у одного из этих коммитов есть конфликт, который вы разрешили в последующем коммите». похоже мой случай. Но у меня до сих пор нет ясного представления, почему перебазирование вновь добавленного файла приведет к конфликту в другом файле.

Мой второй вопрос: когда мне лучше использовать слияние вместо ребазирования? В моем случае кажется, что если в ветви возникнет конфликт с общей базы (в моем случае - commit aee4164), я лучше использую merge вместо rebase. Но так ли это?

1 Ответ

2 голосов
/ 27 июня 2019

Потому что, когда вы объединяете, вы не рассматриваете наборы изменений в середине ветвей, так как они расходятся. Git в основном учитывает различия между кончиками двух веток, которые вы объединяете, и точкой, в которой они расходятся. Если у вас есть ревизия в другой ветке, которая может привести к конфликту, но есть более поздняя ревизия, которая заботится о разделе кода, вызывающем конфликт, таким образом, чтобы конфликт больше не происходил (например, возвращая ревизию, создал бы конфликт ... не единственный путь, но тот, который непременно позаботится о конфликте), слияние не увидит всплывающего конфликта, тогда как при перебазировке это произойдет.

...