git branches

git branch

Создание, просмотр, переименование и удаление веток

Описание

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

Технически ветка в Git — это просто именованный указатель (ref) на коммит. Создание ветки мгновенно и не копирует файлы. Когда вы делаете коммит на ветке, указатель автоматически продвигается вперёд. Это делает ветки в Git невероятно дёшевыми по сравнению с другими VCS.

Используйте git branch для: просмотра всех веток проекта, создания новой ветки от текущего HEAD, переименования существующей ветки, удаления слитых или ненужных веток, а также для просмотра информации о связи локальных веток с удалёнными.

Синтаксис

# Просмотр веток git branch git branch -v git branch -a git branch -r # Создание ветки git branch <имя-ветки> git branch <имя-ветки> <начальная-точка> # Переименование git branch -m <старое-имя> <новое-имя> git branch -m <новое-имя> # переименовать текущую # Удаление git branch -d <имя-ветки> git branch -D <имя-ветки> # Установка upstream git branch --set-upstream-to=origin/<ветка> <локальная-ветка> git branch -u origin/<ветка>

<начальная-точка> — коммит, тег или другая ветка, от которой создаётся новая ветка. По умолчанию — текущий HEAD.

Флаги и опции

Флаг Описание
-a, --all Показать все ветки: локальные и удалённые (remote-tracking)
-r, --remotes Показать только удалённые (remote-tracking) ветки
-v, --verbose Показать последний коммит каждой ветки (hash + сообщение)
-vv Расширенный вывод: также показывает upstream и отставание/опережение
-d, --delete Удалить ветку (только если она слита в HEAD или её upstream)
-D Принудительное удаление ветки, даже если она не слита
-m, --move Переименовать ветку (и её reflog)
-M Принудительное переименование, даже если ветка с новым именем уже существует
-c, --copy Скопировать ветку вместе с её конфигурацией и reflog
--list <паттерн> Показать ветки, совпадающие с glob-паттерном (напр. feature/*)
--merged Показать ветки, уже слитые в текущую ветку (кандидаты на удаление)
--no-merged Показать ветки, ещё не слитые в текущую
-u, --set-upstream-to Установить upstream-ветку для отслеживания
--unset-upstream Удалить связь с upstream-веткой

Паттерны использования

Просмотр всех веток с деталями

# Локальные с последним коммитом и upstream
git branch -vv

# Все ветки (локальные + remote-tracking)
git branch -a

# Только удалённые
git branch -r

Создание ветки для новой фичи

# Создать от текущей ветки (HEAD)
git branch feature/login

# Создать от конкретной точки
git branch hotfix/bug-42 main
git branch hotfix/bug-42 v1.2.0

Очистка слитых веток

# Посмотреть, что можно удалить
git branch --merged main

# Удалить слитые (кроме main и develop)
git branch --merged main | \
  grep -v -E "^\*|main|develop" | \
  xargs git branch -d

Переименование ветки

# Переименовать текущую ветку
git branch -m new-name

# Переименовать другую ветку
git branch -m old-name new-name

# Обновить remote после переименования
git push origin --delete old-name
git push origin -u new-name

Связывание с remote-веткой

# Установить upstream
git branch -u origin/main main

# Проверить связи
git branch -vv

# Сбросить upstream
git branch --unset-upstream feature/login

Поиск веток по паттерну

# Все feature-ветки
git branch --list "feature/*"

# Все ветки с "fix" в имени
git branch --list "*fix*"

# Не слитые feature-ветки
git branch --no-merged HEAD --list "feature/*"

Советы и подводные камни

Соглашение об именах: используйте префиксы для организации веток: feature/, bugfix/, hotfix/, release/, chore/. Это создаёт псевдо-папки в большинстве Git-клиентов и упрощает фильтрацию.
git branch vs git switch/checkout: git branch только создаёт ветку, но не переключается на неё. Для создания с немедленным переключением используйте git switch -c имя-ветки или git checkout -b имя-ветки.
Осторожно с -D: флаг -D удаляет ветку принудительно, даже если в ней есть несохранённые (не слитые) коммиты. Если вы случайно удалили ветку, коммиты ещё можно восстановить через git reflog в течение 30–90 дней (пока не сработает garbage collection).