Модуль 3: Ветвление (Branching) — сердце Git
Ветки — лёгкие указатели на коммиты. Быстро создаются и объединяются, позволяя параллельную разработку и безопасные эксперименты.
Зачем нужны ветки
- Изоляция разработки фич без риска для
main
- Параллельная работа нескольких людей над разными задачами
- Чистая история и упрощение код‑ревью
Полезные практики
- Одна ветка — одна задача; называйте ветки по шаблону:
feature/...
,fix/...
- Регулярно синхронизируйтесь с базовой веткой (fetch + rebase/merge)
- Удаляйте слитые ветки, чтобы поддерживать чистоту
Мыслите веткой как именованной «меткой» на графе истории. Перемещая метки и сопоставляя их, вы управляете потоком изменений, не копируя файлы и не создавая директории для каждой версии проекта.
3.1 Что такое ветка. HEAD, main, feature
Ветка — имя указателя на коммит. HEAD
обычно указывает на текущую ветку; в состоянии detached HEAD указывает на конкретный коммит.
Представьте историю как дорожную развязку: коммиты — это узлы, ветки — дорожные указатели. Переставляя указатели, вы выбираете «маршрут» развития кода. HEAD
— ваш текущий автомобиль, он едет туда, куда укажет ветка.
3.2 Создание и переключение
git branch feature/login
# создать и сразу переключиться
git switch -c feature/login
# или старым способом
git checkout -b feature/login
# переключение
git switch main
# или
git checkout main
git switch
делает смысл команд явнее и безопаснее по умолчанию, чем универсальный checkout
. Используйте switch
для веток и restore
для файлов — так проще избегать путаницы.
3.3 Список и удаление веток
git branch -v
# безопасное удаление слитой ветки
git branch -d feature/login
# принудительное удаление
git branch -D feature/old
3.4 Сравнение веток
git diff main..feature/login
# какие коммиты есть в feature/login, но нет в main
git log --oneline main..feature/login
Для сравнения полезно различать ..
и ...
: первая форма показывает «что есть в правой ветке, но нет в левой», вторая — симметричную разность. Совмещайте сравнения с визуальным графом истории.
3.5 Практика: feature‑ветка
- Создайте ветку для фичи
- Сделайте коммиты по частям (add -p)
- Сравните с main и подготовьте к слиянию
Даже в простом сценарии важно сохранять «чистоту» ветки: маленькие осмысленные коммиты облегчат ревью, а аккуратное слияние — дальнейшее сопровождение.
3.6 Detached HEAD
Состояние, когда HEAD
указывает напрямую на коммит, а не на имя ветки. Полезно для экспериментов и просмотра истории. Чтобы не потерять работу — создайте ветку от текущего состояния.
3.7 Upstream и tracking
Ветка может отслеживать upstream (обычно удалённую ветку). Это включает краткие команды (git pull
, git push
) и влияет на стратегии слияния/ребейза по умолчанию.
3.8 Remote‑tracking ветки
Это локальные ссылки вида origin/main
, отражающие состояние удалённых веток. Они обновляются при git fetch
, но не меняют вашу рабочую директорию.
3.9 Refs и символьные ссылки
Ветки/теги — имена ссылок (refs) в .git/refs
. HEAD
— symref, указывающий на текущую ветку. Понимание структуры refs помогает лучше разбираться во внутренних механизмах Git.
3.10 Именование веток и политика
Используйте префиксы (feature/
, fix/
, docs/
) и осмысленные имена. Избегайте двусмысленных названий. Учитывайте требования CI и защиту веток в вашем проекте.