3. Управление ветками #
3.1. Что такое ветки и зачем они нужны? #
Ветка (branch) в Git — это независимая линия разработки, позволяющая изолировать изменения.
Основная идея использования веток заключается в разделении задач, что делает процесс разработки более организованным.
Зачем нужны ветки? #
- Параллельная разработка: Например, одна ветка для основной версии продукта (обычно
main
илиmaster
), а другая для экспериментов. - Исправление ошибок: Создание отдельной ветки для быстрого исправления багов.
- Кодревью и тестирование: Разработчик может работать в своей ветке, а затем предложить изменения через pull request.
Особенности работы с ветками #
- Ветка всегда начинается с определённого коммита.
- Основной веткой часто является
main
(илиmaster
в старых версиях). - Ветки экономичны: Git сохраняет только различия между ними, а не полные копии файлов.
3.2. Создание и переключение между ветками #
Создание новой ветки #
Чтобы создать новую ветку:
git branch имя_ветки
Пример:
git branch feature/login
Переключение на ветку #
Для переключения между ветками:
git checkout имя_ветки
ИЛИ, начиная с версии Git 2.23, используйте команду git switch
:
git switch имя_ветки
Создание и переключение в одну команду #
git checkout -b имя_ветки
ИЛИ:
git switch -c имя_ветки
Просмотр всех веток #
git branch
- Текущая ветка будет отмечена символом
*
.
Удаление ветки #
После слияния ненужную ветку можно удалить:
git branch -d имя_ветки # Удаление, если ветка слита
git branch -D имя_ветки # Принудительное удаление
3.3. Слияние веток (merge) #
Слияние объединяет изменения из одной ветки в другую.
Пример слияния #
- Переключитесь на ветку, куда хотите внести изменения:
git switch main
- Выполните слияние:
git merge имя_ветки
Типы слияний #
- Fast-forward: Если целевая ветка не имеет собственных изменений, она просто “перематывается” на состояние объединяемой ветки.
- Three-way merge: Если обе ветки имеют свои изменения, Git объединяет их с использованием общего предка.
3.4. Разрешение конфликтов при слиянии #
Конфликты возникают, если изменения в двух ветках затрагивают одну и ту же строку файла.
Как узнать о конфликте? #
При выполнении git merge
Git сообщит, что некоторые файлы имеют конфликты.
Разрешение конфликта #
- Откройте файл с конфликтом. Он будет содержать маркеры:
<<<<<<< HEAD Изменения в текущей ветке ======= Изменения в объединяемой ветке >>>>>>> имя_ветки
- Оставьте нужные изменения и удалите маркеры.
- Добавьте файл в staging area:
git add имя_файла
- Завершите слияние:
git commit
Отмена слияния #
Если вы хотите отменить слияние:
git merge --abort
3.5. Перемотка веток (rebase) #
Rebase (перемотка) переписывает историю коммитов, применяя изменения текущей ветки поверх другой.
Пример использования #
- Переключитесь на ветку, которую хотите перемотать:
git switch feature/login
- Выполните rebase:
git rebase main
Сравнение с merge #
- Merge сохраняет обе ветки, добавляя объединяющий коммит.
- Rebase переписывает историю так, как будто изменения были выполнены последовательно.
Исправление конфликтов при rebase #
Если возникают конфликты:
- Разрешите их вручную.
- Добавьте исправленные файлы в staging area:
git add имя_файла
- Продолжите rebase:
git rebase --continue
Отмена rebase #
Для отмены процесса rebase:
git rebase --abort
Итоги #
Ветки — это мощный инструмент Git, который позволяет разделять задачи, изолировать изменения и работать над проектом в команде. Merge и rebase дают гибкость в объединении изменений, а навыки разрешения конфликтов помогают справляться с неизбежными ситуациями при совместной разработке.