Урок 03

Ветки и переключение

Что такое ветка

Ветка (branch) — независимая линия разработки. Работаешь над фичей — не ломаешь основную ветку.

Ветки в Git — очень дешёвые. Можно создавать десятки без проблем.

Просмотр веток

git branch                   # локальные
git branch -a                # включая удалённые
git branch -v                # с последним коммитом
git branch --merged          # влитые в текущую
git branch --no-merged       # не влитые

Создание и переключение

git branch feature-login            # создать
git checkout feature-login          # переключиться (старый способ)
git switch feature-login            # переключиться (новый способ)

# Создать и сразу переключиться
git checkout -b feature-login
git switch -c feature-login

switch — современный синтаксис, checkout — старый. Оба работают.

Переименование и удаление

git branch -m old-name new-name     # переименовать
git branch -d feature-login         # удалить (если влита)
git branch -D feature-login         # удалить принудительно

Стратегии ветвления

GitHub Flow (для небольших команд)

main
 └── feature/новая-фича
      └── PR → merge в main

Правила:

  • main — всегда работает
  • Каждая фича — отдельная ветка от main
  • Merge в main через Pull Request

Плюс: простота. Минус: нет staging-среды.

Git Flow (для крупных проектов)

main (продакшен)
 └── develop (разработка)
      ├── feature/* (фичи)
      ├── release/* (релизы)
      └── hotfix/* (срочные фиксы)

Ветки:

  • main — только стабильный код, только релизы
  • develop — основная разработка
  • feature/* — фичи, от develop
  • release/* — подготовка релиза
  • hotfix/* — срочные фиксы на main

Плюс: чёткая структура. Минус: сложно для маленьких команд.

Trunk-Based Development

Все коммитят в main. Ветки максимум на день-два.

Плюс: минимум конфликтов. Минус: нужны хорошие тесты.

Именование веток

Правила:

feature/user-registration
feature/add-search
fix/login-error
fix/500-on-profile
refactor/user-service
hotfix/critical-payment-bug
chore/update-deps

Формат: тип/краткое-описание-через-дефис.

Плохо: new, test, fix, branch1. Хорошо: feature/oauth-google-login.

Проверка: где я

git branch                   # текущая — со звёздочкой
git status                   # тоже показывает

Отслеживание удалённых веток

git push -u origin feature-login      # запушить и связать
git branch --set-upstream-to=origin/main

После -u можно просто:

git push
git pull

Удалённые ветки

git push origin feature-login         # создать на удалёнке
git push origin --delete feature-login  # удалить
git fetch --prune                     # убрать локальные ссылки на удалённые ветки
git remote prune origin               # то же

Кейс: работа над фичей

# 1. Обновляем main
git switch main
git pull

# 2. Создаём ветку
git switch -c feature/user-profile

# 3. Работаем
git add .
git commit -m "feat: добавить страницу профиля"

# 4. Пушим
git push -u origin feature/user-profile

# 5. Открываем PR (на GitHub)

# 6. После merge — удаляем ветку
git switch main
git pull
git branch -d feature/user-profile

Итог

Ветки — основа командной работы. Для веба бери GitHub Flow: просто, быстро, понятно.

Дальше — merge и разрешение конфликтов.