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