Как именно происходит конфликт git merge?
Я сделал репозиторий git и добавил к нему текстовый файл. Это 100% для целей обучения.
Я добавил "1" в текстовый файл и передал его мастеру.
Создал новую ветку от мастера и добавил "2".
Наконец, создали ветку от мастера и добавили "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 алгоритм