Начальный ~25 мин чтения

Ветки: создание, переключение и слияние

Урок 3 из 5 в курсе Git для разработчика

Ветки: создание, переключение и слияние

ветки позволяют разрабатывать фичи изолированно и объединять результат через merge или rebase.

Почему это важно: Работа без веток означает постоянный риск сломать рабочий код. Ветки — основа любого командного процесса разработки.

Главная идея

Ветка — это просто лёгкий указатель на коммит. Переключение между ветками мгновенно, потому что Git не копирует файлы.

Как это выглядит на практике

  1. git branch feature/login создаёт новую ветку от текущего коммита.
  2. git switch feature/login переключает рабочую директорию на эту ветку.
  3. Разработчик делает коммиты в ветке, не затрагивая main.
  4. git merge feature/login объединяет ветку с main.

Что происходит под капотом

  • Ветка — файл в .git/refs/heads/ содержащий SHA-1 последнего коммита ветки.
  • При переключении ветки Git обновляет HEAD и меняет содержимое рабочей директории по дереву коммита.
  • Fast-forward merge просто двигает указатель ветки вперёд, не создавая merge-коммит.
  • Three-way merge использует общего предка двух веток для нахождения изменений и создаёт merge-коммит.

Типичные ошибки и заблуждения

  • Ошибка: нужно ждать завершения фичи, чтобы создать ветку. Ветку создают до начала работы над задачей.
  • Ошибка: merge всегда создаёт лишний коммит. Fast-forward merge обходится без него.
  • Ошибка: rebase опасен всегда. Rebase опасен только для опубликованных веток, которые используют другие.
  • Ошибка: после merge можно удалить ветку только вручную. git branch -d автоматически удаляет уже слитые ветки.

Ключевые выводы

  • Ветки в Git невесомы — их создание мгновенно и не требует копирования файлов.
  • main (или master) — стабильная ветка; фичи разрабатываются в отдельных ветках.
  • Конфликт — нормальная часть работы с ветками, а не признак ошибки.
  • Называйте ветки по задаче: feature/login, fix/cart-bug, chore/update-deps.

Термины урока

Branch: указатель на коммит, обновляемый при новых коммитах.
Merge: объединение истории двух веток.
Conflict: ситуация, когда Git не может автоматически объединить изменения.
Fast-forward: слияние без merge-коммита, когда ветки не расходились.

Связь с работой backend-разработчика

В командах используют модели ветвления: GitHub Flow (feature → main) или Git Flow (feature → develop → release → main). Выбор модели влияет на скорость деплоя и частоту релизов.

Мини-разбор реальной ситуации

Два разработчика редактировали один контроллер в разных ветках. При merge Git показывает конфликт. Решение: открыть файл, найти маркеры <<<<<<, ======, >>>>>>, выбрать нужный вариант, сохранить и сделать коммит.

Что запомнить

  • Создавайте ветку на каждую задачу, даже маленькую.
  • Конфликты при merge — нормально; их надо уметь разрешать.
  • Удаляйте ветки после слияния, чтобы репозиторий не засорялся.

Итог

Ветки — главный инструмент изоляции работы в Git. Их правильное использование делает командную разработку предсказуемой и безопасной.