Что составляет конфликт слияния в Git?

Как git определяет, что конкретное слияние имеет конфликт, и что это за конфликт?

Мой предположение будет выглядеть примерно так: если два объединяемых коммита имеют общий родительский коммит, и если они оба изменили строку X по сравнению с тем, что было у родителя, это конфликт.

Что усложняет мое понимание:

  • " Изменение строки X "может означать замену ее несколькими новыми строками, и что ' s по-прежнему отображается как один конфликт (версия A имеет эту одну строку, а версия B имеет эти 5 строк или что-то еще)
  • Если вы вставили строки в один из коммитов, более тупой алгоритм подумает, что all последующие строки были изменены: строка 30 теперь имеет прежнее содержимое строки 25, 31 имеет прежнее содержимое 26 и т. Д. Но git может сказать, что это то же самое, и я не знаю как.

Может Кто-нибудь объяснит, как это работает, или укажите мне ссылку, которая есть?

40
задан Nathan Long 7 February 2011 в 11:41
поделиться