Что такое ветки и зачем они нужны

Разбираемся, почему ветки в git «бесплатны» и зачем разработчики создают их десятками.

Ветка (branch) — это лёгкий подвижный указатель на конкретный коммит. Создание ветки почти ничего не стоит.

Зачем нужны ветки

Представьте, что вы пишете новую большую фичу. Она ещё сырая, и сломать рабочую версию проекта нельзя — её используют другие. Решение: создать отдельную ветку, спокойно экспериментировать в ней, а когда фича готова — влить изменения обратно в основную ветку. Если эксперимент провалился, ветку можно просто удалить, и основная версия не пострадает.

Ветки используют для:

  • разработки новых функций (feature branches);
  • исправления багов отдельно от основной работы;
  • экспериментов, которые не жалко выбросить;
  • параллельной работы нескольких человек, не мешая друг другу.

Как ветка устроена внутри

Это ключ к пониманию git. Ветка — не «копия файлов», как думают новички, а всего лишь подвижный указатель (по сути — файл с хешем коммита). Когда вы делаете новый коммит, указатель текущей ветки автоматически перемещается на него вперёд.

Поэтому создание ветки мгновенно: git просто записывает ещё один указатель на тот же коммит, не копируя ни одного файла. В тяжёлых старых системах ветка означала дублирование всего проекта — в git это не так.

HEAD — где я сейчас

Есть особый указатель HEAD — он показывает, на какой ветке (и на каком коммите) вы находитесь прямо сейчас. Когда вы переключаетесь на другую ветку, HEAD переезжает вместе с вами, а файлы в рабочей директории меняются на состояние этой ветки.

ПонятиеЧто это
КоммитСнимок проекта
ВеткаПодвижный указатель на коммит
HEADУказатель на текущую ветку

main и develop

В большинстве проектов есть главная ветка — main (раньше её называли master). Это «эталонная» версия, которую стараются держать всегда рабочей. От неё ответвляют рабочие ветки и в неё же вливают готовый код.

Ветки в реальной жизни

Чтобы прочувствовать пользу веток, представьте типичный день разработчика. Вы спокойно пишете новую фичу в своей ветке. Вдруг приходит срочный баг на проде. Вы переключаетесь на свежую ветку от main, чините баг, отправляете фикс — и возвращаетесь к фиче ровно туда, где остановились. Ваша незаконченная работа всё это время была изолирована и никому не мешала. Без веток пришлось бы либо коммитить полусырой код в общую версию, либо рисковать его потерять.

Сколько веток — это нормально

Новички иногда боятся «расплодить» ветки. На деле ветки в git настолько дёшевы, что заводить отдельную ветку под каждую задачу — норма, а не излишество. В активном проекте одновременно могут существовать десятки веток: по одной на каждую фичу, баг и эксперимент. После слияния ненужные ветки удаляют, и список остаётся опрятным. Не экономьте на ветках — это бесплатно.

Итог

  • Ветка — лёгкий указатель на коммит, а не копия файлов.
  • Создание ветки мгновенно и почти ничего не стоит.
  • HEAD показывает, где вы находитесь сейчас.
  • main — главная, всегда рабочая ветка проекта.
Проверьте себя
1. Чем на самом деле является ветка в git?
AПолной копией всех файлов проекта
BЛёгким подвижным указателем на коммит
CОтдельным репозиторием
DСообщением коммита
2. Что показывает указатель HEAD?
AСамый первый коммит проекта
BНа какой ветке и коммите вы находитесь сейчас
CАдрес удалённого репозитория
DИмя автора последнего коммита
3. Почему создание ветки в git происходит почти мгновенно?
Agit сжимает файлы перед копированием
Bgit создаёт лишь новый указатель, не копируя файлы
Cветки хранятся в облаке
Dgit удаляет старую ветку
Поддержать проект