↓Перейти к содержанию
  1. Git: руководства и команды/

Как создать ветку в Git: пошаговое руководство

·5 минут·

Создание ветки — первый шаг перед работой над любой новой задачей. Не важно, добавляете ли вы функцию, исправляете баг или проводите рефакторинг — всё это делается в отдельных ветках, не затрагивая основной код. В 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: полное руководство».