Как именно происходит конфликт git merge?

Я сделал репозиторий git и добавил к нему текстовый файл. Это 100% для целей обучения.

  1. Я добавил "1" в текстовый файл и передал его мастеру.

  2. Создал новую ветку от мастера и добавил "2".

  3. Наконец, создали ветку от мастера и добавили "3".

Не могли бы вы объяснить, как может возникнуть конфликт в этом или любом другом сценарии?

2 ответа

Решение

У вас будет конфликт, если вы объедините:

  • branch2 в master (без конфликтов)
  • branch3 в master (Конфликт):

Это потому:

  • Общий предок будет master (вторая строка пуста)
  • исходный контент branch3 (со второй строкой, включающей "3")
  • конечный контент находится на последнем из master (со второй строкой, включающей "2", от слияния branch2 в master)

Git попросит вас выбрать контент для хранения ("3", "2" или оба).

Сначала сделайте слияния после:

git config merge.conflictstyle diff3

Смотрите " Исправить конфликты слияния в Git?".

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

В этом случае ваши шаги 2 и 3 создают две ветви, которые имеют конфликтующие изменения.

Я понимаю, что это старый вопрос, но если вы хотите интуитивно узнать алгоритмы, используемые Git для сравнения двух файлов, это прояснит сомнения в том, как перекрывающиеся области работают с diff.

Вот объяснение одного из популярных алгоритмов, разработанного Юджином В. Майерсом. В этом подходе поиск самого короткого сценария редактирования (SES) моделируется как поиск по графу. Вот действительно хорошая статья Джеймса Коглану на то же самое с примером - Майерс Diff алгоритм

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