Управление ветками

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) #

Слияние объединяет изменения из одной ветки в другую.

Пример слияния #

  1. Переключитесь на ветку, куда хотите внести изменения:
    git switch main
    
  2. Выполните слияние:
    git merge имя_ветки
    

Типы слияний #

  • Fast-forward: Если целевая ветка не имеет собственных изменений, она просто “перематывается” на состояние объединяемой ветки.
  • Three-way merge: Если обе ветки имеют свои изменения, Git объединяет их с использованием общего предка.

3.4. Разрешение конфликтов при слиянии #

Конфликты возникают, если изменения в двух ветках затрагивают одну и ту же строку файла.

Как узнать о конфликте? #

При выполнении git merge Git сообщит, что некоторые файлы имеют конфликты.

Разрешение конфликта #

  1. Откройте файл с конфликтом. Он будет содержать маркеры:
    <<<<<<< HEAD
    Изменения в текущей ветке
    =======
    Изменения в объединяемой ветке
    >>>>>>> имя_ветки
    
  2. Оставьте нужные изменения и удалите маркеры.
  3. Добавьте файл в staging area:
    git add имя_файла
    
  4. Завершите слияние:
    git commit
    

Отмена слияния #

Если вы хотите отменить слияние:

git merge --abort

3.5. Перемотка веток (rebase) #

Rebase (перемотка) переписывает историю коммитов, применяя изменения текущей ветки поверх другой.

Пример использования #

  1. Переключитесь на ветку, которую хотите перемотать:
    git switch feature/login
    
  2. Выполните rebase:
    git rebase main
    

Сравнение с merge #

  • Merge сохраняет обе ветки, добавляя объединяющий коммит.
  • Rebase переписывает историю так, как будто изменения были выполнены последовательно.

Исправление конфликтов при rebase #

Если возникают конфликты:

  1. Разрешите их вручную.
  2. Добавьте исправленные файлы в staging area:
    git add имя_файла
    
  3. Продолжите rebase:
    git rebase --continue
    

Отмена rebase #

Для отмены процесса rebase:

git rebase --abort

Итоги #

Ветки — это мощный инструмент Git, который позволяет разделять задачи, изолировать изменения и работать над проектом в команде. Merge и rebase дают гибкость в объединении изменений, а навыки разрешения конфликтов помогают справляться с неизбежными ситуациями при совместной разработке.