git branch
Создание, просмотр, переименование и удаление веток
Описание
git branch — основная команда управления ветками в Git. Ветки позволяют вести параллельную разработку: каждая ветка представляет собой независимую линию истории коммитов. Команда без аргументов выводит список локальных веток, помечая текущую звёздочкой *.
Технически ветка в Git — это просто именованный указатель (ref) на коммит. Создание ветки мгновенно и не копирует файлы. Когда вы делаете коммит на ветке, указатель автоматически продвигается вперёд. Это делает ветки в Git невероятно дёшевыми по сравнению с другими VCS.
Используйте git branch для: просмотра всех веток проекта, создания новой ветки от текущего HEAD, переименования существующей ветки, удаления слитых или ненужных веток, а также для просмотра информации о связи локальных веток с удалёнными.
Синтаксис
<начальная-точка> — коммит, тег или другая ветка, от которой создаётся новая ветка. По умолчанию — текущий 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 только создаёт ветку, но не переключается на неё. Для создания с немедленным переключением используйте git switch -c имя-ветки или git checkout -b имя-ветки.
-D удаляет ветку принудительно, даже если в ней есть несохранённые (не слитые) коммиты. Если вы случайно удалили ветку, коммиты ещё можно восстановить через git reflog в течение 30–90 дней (пока не сработает garbage collection).