Как создать ветку в Git: пошаговое руководство
Создание ветки — первый шаг перед работой над любой новой задачей. Не важно, добавляете ли вы функцию, исправляете баг или проводите рефакторинг — всё это делается в отдельных ветках, не затрагивая основной код. В Git есть несколько способов создать ветку, каждый со своими сценариями использования.
Если хотите сначала понять, что такое ветки и зачем они нужны — прочитайте статью «Ветки в Git: полное руководство».
Способ 1: git branch (создать без переключения) #
Базовая команда создаёт ветку, но не переключается на неё:
git branch feature-auth
После этого у вас две ветки, и вы остаётесь на текущей:
git branch
# * main ← вы здесь
# feature-auth ← новая ветка
Переключитесь отдельной командой:
git switch feature-auth
# или старый способ:
git checkout feature-auth
Этот способ удобен, когда нужно создать ветку «про запас», но продолжать работать в текущей.
Способ 2: git checkout -b (создать и переключиться) #
Старый, но всё ещё широко используемый способ — объединяет создание и переключение в одну команду:
git checkout -b feature-auth
Это эквивалентно двум командам:
git branch feature-auth
git checkout feature-auth
Вы сразу оказываетесь в новой ветке:
git branch
# main
# * feature-auth ← вы здесь
Способ 3: git switch -c (современный, рекомендуется) #
Начиная с Git 2.23 (2019 год), появилась команда git switch — более понятная замена git checkout для работы с ветками:
git switch -c feature-auth
Флаг -c означает «create». Эта команда делает то же самое, что git checkout -b, но намерение более очевидно из синтаксиса.
# Проверить текущую ветку
git branch --show-current
# feature-auth
Используйте git switch -c для новых проектов — это рекомендуемый современный синтаксис.
Создание ветки от конкретного коммита #
По умолчанию ветка создаётся от текущего HEAD. Но можно указать конкретную точку:
# От конкретного коммита по хешу
git branch feature-from-old a1b2c3d
git checkout -b feature-from-old a1b2c3d
git switch -c feature-from-old a1b2c3d
# От тега
git checkout -b hotfix/v1.2.1 v1.2.0
# От другой ветки
git checkout -b feature/new-api develop
git switch -c feature/new-api develop
Последний пример полезен в Git Flow: ветки функций создаются от develop, а не от main.
Создание ветки с отслеживанием удалённой ветки #
Если хотите создать локальную ветку, которая «следит» за удалённой:
# Получить информацию об удалённых ветках
git fetch origin
# Создать локальную ветку, отслеживающую удалённую
git checkout -b feature-auth origin/feature-auth
git switch -c feature-auth origin/feature-auth
# Или краткий способ (если имена совпадают)
git checkout --track origin/feature-auth
# Проверить настройку отслеживания
git branch -vv
# * feature-auth a1b2c3d [origin/feature-auth] Add auth form
Теперь git push и git pull будут работать автоматически без указания имени удалённого репозитория и ветки.
Проверка создания ветки #
После создания ветки убедитесь, что всё правильно:
# Список всех локальных веток (звёздочка — текущая)
git branch
# Текущая ветка
git branch --show-current
# Подробная информация (имя, хеш последнего коммита, сообщение)
git branch -v
# Все ветки включая удалённые
git branch -a
Правила именования веток #
Хорошие названия веток — это документация. По имени ветки должно быть понятно, что в ней делается.
Рекомендуемый формат #
тип/краткое-описание-в-kebab-case
Примеры:
feature/user-authentication
feature/export-to-csv
bugfix/fix-login-redirect
hotfix/critical-payment-error
release/v2.1.0
chore/update-dependencies
refactor/simplify-auth-module
docs/add-api-documentation
Технические ограничения #
Git запрещает:
- Пробелы в именах (
my branch→ ошибка) - Двойные точки (
feature..test) - Специальные символы:
~,^,:,?,*,[,\ - Имя, начинающееся с
- - Имя
.или..
Типичные плохие названия #
my-branch # Кто? Что? Зачем?
test # Тест чего?
fix # Что именно исправляем?
new # Что нового?
wip # Work in progress — слишком расплывчато
branch1 # Нет смысла
Практический пример: полный цикл работы с веткой #
# 1. Убедиться, что main актуальна
git switch main
git pull origin main
# 2. Создать ветку для задачи
git switch -c feature/user-profile
# 3. Разработка
echo "profile code" > user-profile.js
git add user-profile.js
git commit -m "feat: add user profile component"
# 4. Ещё коммиты
echo "profile tests" > user-profile.test.js
git add user-profile.test.js
git commit -m "test: add tests for user profile"
# 5. Посмотреть что сделали
git log --oneline -5
# 6. Отправить ветку на сервер
git push -u origin feature/user-profile
# 7. Открыть Pull Request на GitHub (через веб-интерфейс)
# 8. После слияния — убрать ветку локально
git switch main
git pull origin main
git branch -d feature/user-profile
# 9. Убрать удалённую ветку (если не удалена автоматически)
git push origin --delete feature/user-profile
Что происходит с незакоммиченными изменениями при создании ветки #
Это важный момент: незакоммиченные изменения переходят вместе с вами при переключении веток:
# Вы на main, есть изменённый файл
echo "new code" >> app.js
git status
# modified: app.js
# Создаёте ветку и переключаетесь
git switch -c feature/new-code
# Изменения app.js теперь в feature/new-code
git status
# modified: app.js
Если хотите начать с чистого состояния — сначала закоммитьте или сохраните изменения через git stash.
Часто задаваемые вопросы #
Что лучше: git checkout -b или git switch -c? Для новых проектов и новичков лучше git switch -c — синтаксис более явный. git checkout -b — старый способ, работает везде, в том числе в старых версиях Git.
Нужно ли коммитить перед созданием ветки? Не обязательно. Незакоммиченные изменения переходят с вами при переключении. Но если Git не может безопасно переключиться (есть конфликты), он потребует сначала их разрешить.
Как правильно назвать ветку? Используйте тип/описание-в-kebab-case. Тип: feature, bugfix, hotfix, chore, docs, refactor. Описание: короткое, но осмысленное, через дефис.
Можно ли создать ветку, уже будучи в другой ветке? Да. По умолчанию новая ветка создаётся от текущего коммита, но можно явно указать другую точку отсчёта.
Как создать ветку от тега? git checkout -b hotfix/v1.2.1 v1.2.0 — создаст ветку hotfix/v1.2.1 от тега v1.2.0.
Заключение #
В Git три способа создания ветки: git branch (только создать), git checkout -b (создать и переключиться, старый синтаксис), git switch -c (создать и переключиться, современный синтаксис). Для новых проектов рекомендуется git switch -c.
Давайте веткам осмысленные имена с префиксом типа: feature/, bugfix/, hotfix/. Это упрощает навигацию в больших проектах с десятками параллельных веток.
Следующий шаг — научиться переключаться между ветками и узнать про «git commit: полное руководство».