Трёхстороннее слияние
Часть раздела Контроль версий путешествия по Terminal на Coddy — урок 36 из 58.
Если обе ветки развивались независимо, Git не может просто выполнить fast-forward. Вместо этого он выполняет трехстороннее слияние: он берет общего предка и верхушки двух веток и создает новый коммит, который их объединяет.
Этот новый коммит является коммитом слияния (merge commit). У него два родителя, по одному из каждой ветки:
git switch main
git merge feature -m "Merge feature"Флаг -m позволяет указать сообщение коммита слияния напрямую, поэтому Git не открывает редактор.
В большинстве случаев Git может автоматически объединять изменения из обеих веток, если они затрагивают разные части файлов. Конфликты возникают только тогда, когда в обеих ветках изменены одни и те же строки, и это тема следующего урока.
Задание
СреднеВы начинаете в новой папке с top.txt (содержимое: a) и bottom.txt (содержимое: b).
Инициализируйте репозиторий, сделайте первый коммит, затем:
- Создайте ветку
featureи добавьте строкуaddedвtop.txt; сделайте коммит. - Переключитесь на
mainи добавьте строкуaddedвbottom.txt; сделайте коммит. - Слейте
featureвmainс сообщениемMerge feature.
Выведите количество коммитов, доступных из HEAD, используя git rev-list --count HEAD. Ожидаемое количество — 4 (initial + feature + main + merge).
Шпаргалка
Когда обе ветки разошлись, Git выполняет трехстороннее слияние, создавая новый коммит слияния с двумя родителями:
git switch main
git merge feature -m "Merge feature"Флаг -m устанавливает сообщение коммита слияния без открытия редактора. Git выполняет слияние автоматически, если в обеих ветках были изменены разные строки.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Контроль версий
2Начало работы
Инициализация репозиторияПапка .gitНастройка данных пользователяGit StatusИтоги — первый репозиторий5Игнорирование файлов
Зачем игнорировать файлыШаблоны .gitignoreПроверка правил игнорированияИтоги: чистый репозиторий8Слияние
Что такое слияниеСлияние Fast-ForwardТрёхстороннее слияниеКонфликты слиянияРазрешение конфликтаИтоги — Мастер слияния11Проект: Feature Branch
Обзор проектаИнициализация Main3Отслеживание изменений
Область подготовкиGit AddGit CommitИзменение отслеживаемого файлаGit LogИтоги: первые коммиты6Проект: Сайт рецептов
Обзор проектаИнициализация и игнорирование