Что такое конфликты в Git?
Конфликт в Git возникает, когда две или более ветки изменяют одну и ту же строку в одном и том же файле или когда одна
ветка удаляет файл, который была изменён другой. Это часто происходит во время слияния веток (merge) или при попытке
применить изменения с помощью команды rebase
.
Пример конфликта
Рассмотрим простой сценарий:
Шаг 1: Создаём репозиторий и файл
git init my-repo
cd my-repo
echo "Hello World" > file.txt
git add file.txt
git commit -m "Первый коммит с файлом file.txt"
Шаг 2: Создаём новую ветку и вносим изменения
git checkout -b feature-1
echo "Hello from feature-1" >> file.txt
git commit -am "Добавлено сообщение из feature-1"
Шаг 3: Возвращаемся на master и вносим изменения
git checkout master
echo "Hello from master" >> file.txt
git commit -am "Добавлено сообщение из master"
Шаг 4: Слияние веток
Теперь, когда обе ветки внесли свои изменения в file.txt
, давайте попробуем слить ветку feature-1
в master
:
git merge feature-1
На этом этапе Git обнаружит конфликт, так как обе ветки изменили один и тот же файл. Вы увидите сообщение о конфликте в терминале:
Auto-merging file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.
Как разрешить конфликт
- Открыть файл с конфликтом – файл
file.txt
теперь будет содержать маркеры конфликтов:
Hello World
<<<<<<< HEAD
Hello from master
=======
Hello from feature-1
>>>>>>> feature-1
- Исправить файл – вам нужно выбрать, какие изменения оставить. Например, можно объединить строки или оставить одну из них. После редактирования файл может выглядеть так:
Hello World
Hello from master
Hello from feature-1
- Добавить файл для индексации и завершить слияние:
git add file.txt
git commit -m "Разрешён конфликт между master и feature-1"
Заключение
Конфликты в Git – это нормальная часть работы с системами контроля версий, особенно когда несколько разработчиков
работают над одним проектом. Важно быть внимательным при разрешении конфликтов и проверять, что все необходимые
изменения были учтены. Оператор git status
будет полезен для отслеживания текущего состояния вашего репозитория и
поможет вам понять, какие файлы содержат конфликты.