Ветвление
1Что такое ветки и зачем они нужны← вы здесь2Слияние веток и конфликты3Конфликты слияния
Урок 1~12 минут

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

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

Ветка — это просто указатель

Технически ветка в Git — это файл из 41 байта. В нём хранится хеш последнего коммита ветки. Всё.

.git/refs/heads/main     → "a1b2c3d4e5f6..."
.git/refs/heads/feature  → "7g8h9i0j1k2l..."

Когда ты делаешь новый коммит, Git:

  1. Создаёт объект коммита с хешем
  2. Обновляет файл текущей ветки — записывает туда новый хеш

Создать ветку стоит почти ноль — нет копирования файлов, нет дубликатов. Просто новый указатель.

HEAD — где ты сейчас

HEAD — это специальный указатель, который всегда знает, в какой ветке (или коммите) ты находишься.

HEAD → main → a1b2c3

Когда ты переключаешься на ветку, HEAD меняется. Новые коммиты двигают HEAD и текущую ветку вместе.

Попробуй сам

В симуляции ниже — полный цикл работы с ветками. Наблюдай, как HEAD переходит между ветками, как коммиты расходятся и потом сливаются.

Основные команды

bash
git branch              # список всех веток (текущая помечена *)
git branch feature      # создать ветку feature
git switch feature      # переключиться на feature
git switch -c feature   # создать и сразу переключиться (короче)
git branch -d feature   # удалить ветку (после merge)

git switch — современная замена git checkout. Checkout делает слишком много вещей. Switch — только переключает ветки. Используй switch в новых проектах.

Зачем вообще ветки?

Изоляция работы. Ты пишешь новую фичу в отдельной ветке. Если что-то пошло не так — просто удаляешь ветку. Main нетронут.

Параллельная разработка. Несколько разработчиков могут работать над разными задачами одновременно, не мешая друг другу.

Code Review. В GitHub/GitLab принято создавать Pull Request из ветки в main. Коллеги смотрят diff, оставляют комментарии — и только потом ветка вливается.

Эксперименты. Хочешь попробовать другой подход? Создай ветку experiment, сломай всё что нужно. Если не понравится — удали и вернись на main.

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

bash
# Начинаешь новую задачу
git switch main
git pull                          # берём последнее с сервера
git switch -c feature/user-auth   # создаём ветку
 
# Работаешь
git add .
git commit -m "feat: add JWT tokens"
git commit -m "feat: add /login endpoint"
 
# Отправляешь на Code Review
git push origin feature/user-auth
# → создаёшь Pull Request в GitHub

В следующем уроке — как ветки сливаются: git merge, конфликты и их разрешение.

Ветка — это просто указатель на коммит. Создать ветку почти бесплатно — Git хранит только имя и хеш.
🌿
Визуализация ветокшаг 0 / 6
a1b2c3Initial commitd4e5f6Add README7g8h9iAdd login feat…mainHEAD
🎯
Миссия 1 из 4
Как создать новую ветку с именем feature?