Конфликты слияния
Часть раздела Контроль версий путешествия по Terminal на Coddy — урок 37 из 58.
Если обе ветки изменили одни и те же строки одного и того же файла, Git не может угадать, какую версию оставить. Он приостанавливает слияние и просит вас принять решение.
Конфликтный файл получает специальные маркеры, показывающие обе версии:
<<<<<<< HEAD
the version on main
=======
the version on feature
>>>>>>> featureВаша задача — отредактировать файл вручную: выберите одну версию, объедините их или напишите что-то новое. Затем удалите все маркеры конфликтов (строки <<<, ===, >>>).
Как только файл будет выглядеть правильно, добавьте его в индекс и завершите слияние еще одним коммитом:
git add notes.txt
git commit -m "Resolve merge conflict in notes"Если вы передумаете на полпути, вы можете прервать весь процесс и вернуться к состоянию до слияния:
git merge --abortЗадание
СреднеВ папке находится файл notes.txt со строкой hello.
Инициализируйте репозиторий и закоммитьте исходный файл. Создайте ветку alt, измените notes.txt, чтобы там было написано hi from alt, и сделайте коммит.
Переключитесь обратно на main, измените notes.txt, чтобы там было написано hi from main, и сделайте коммит.
Попробуйте объединить alt с main. Возникнет конфликт слияния. Отмените его с помощью git merge --abort, затем выведите содержимое notes.txt с помощью cat, чтобы подтвердить, что файл вернулся к версии из main.
Шпаргалка
Когда обе ветки редактируют одни и те же строки, Git приостанавливает слияние и добавляет в файл маркеры конфликта:
<<<<<<< HEAD
the version on main
=======
the version on feature
>>>>>>> featureОтредактируйте файл до нужного результата, удалите все маркеры, затем проиндексируйте изменения и выполните коммит:
git add notes.txt
git commit -m "Resolve merge conflict in notes"Чтобы отменить слияние и восстановить состояние до слияния:
git merge --abortПопробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Контроль версий
2Начало работы
Инициализация репозиторияПапка .gitНастройка данных пользователяGit StatusИтоги — первый репозиторий5Игнорирование файлов
Зачем игнорировать файлыШаблоны .gitignoreПроверка правил игнорированияИтоги: чистый репозиторий8Слияние
Что такое слияниеСлияние Fast-ForwardТрёхстороннее слияниеКонфликты слиянияРазрешение конфликтаИтоги — Мастер слияния11Проект: Feature Branch
Обзор проектаИнициализация Main3Отслеживание изменений
Область подготовкиGit AddGit CommitИзменение отслеживаемого файлаGit LogИтоги: первые коммиты6Проект: Сайт рецептов
Обзор проектаИнициализация и игнорирование