Олег Марков
Просмотр веток в Git с помощью git branch -a
Введение
Команда git branch часто воспринимается как что-то базовое и очевидное. Но как только в проекте появляется несколько удаленных репозиториев, десятки веток и сложный процесс разработки, простого git branch уже не хватает. В этот момент на первый план выходит git branch -a.
Смотрите, я покажу вам, как команда git branch -a помогает:
- увидеть всю карту веток проекта — и локальных, и удаленных;
- понять, какие ветки вы уже склонировали, а какие существуют только на сервере;
- ориентироваться в сложных репозиториях с несколькими удаленными (origin, upstream и т.д.);
- диагностировать проблемы, когда вы уверены, что ветка «есть на сервере», но Git ее «не видит».
Давайте разберем git branch -a шаг за шагом, с примерами и разбором типичных ситуаций, с которыми вы можете столкнуться в реальной работе.
Основы работы с ветками и командой git branch
Что такое ветка в Git и почему важно уметь их просматривать
Ветка в Git — это просто указатель на конкретный коммит. Вы можете представить ее как «метку», которая двигается вперед вместе с новыми коммитами.
Когда вы работаете в команде, веток становится много:
- фича-ветки (feature/…)
- ветки багфиксов (bugfix/… или hotfix/…)
- релизные ветки (release/…)
- основная ветка (master или main)
- экспериментальные ветки
Поэтому уметь быстро увидеть:
- какие ветки у вас есть локально;
- какие существуют только на удаленном репозитории (на сервере);
- к каким веткам вы уже привязали локальные копии;
становится критически важно. Команда git branch -a как раз решает эту задачу.
Базовая команда git branch
Прежде чем перейти к флагу -a, давайте коротко вспомним, как работает просто git branch.
Пример:
git branch
# Выводит список локальных веток
# * main
# feature/login
# bugfix/cart
Комментарии к выводу:
- звездочка (*) показывает текущую ветку, в которой вы сейчас находитесь;
- без дополнительных флагов git branch показывает только локальные ветки;
- удаленные ветки (которые есть на сервере) в этом списке не отображаются.
Чтобы увидеть полную картину, нам как раз нужен флаг -a.
Что делает git branch -a
Основное назначение флага -a
Команда:
git branch -a
делает следующее:
- показывает все локальные ветки;
- показывает все удаленные ветки (remote-tracking branches), которые известны вашему локальному репозиторию;
- помечает текущую ветку звездочкой.
Давайте посмотрим типичный пример вывода и разберем его.
Разбор вывода git branch -a на примере
Представим, что вы запускаете:
git branch -a
и получаете:
* main # текущая локальная ветка
feature/login # локальная ветка
bugfix/cart # локальная ветка
remotes/origin/HEAD -> origin/main # символическая ссылка на основную ветку
remotes/origin/main # удаленная ветка main на origin
remotes/origin/feature/login
remotes/origin/feature/profile
remotes/upstream/main
Обратите внимание на несколько моментов:
Локальные ветки отображаются без префикса.
- main
- feature/login
- bugfix/cart
Удаленные ветки всегда начинаются с префикса remotes/:
- remotes/origin/main
- remotes/origin/feature/login
- remotes/upstream/main
В записи remotes/origin/HEAD -> origin/main вы видите специальную ссылку:
- это не «обычная» ветка, а указатель HEAD удаленного репозитория origin;
- он показывает, какую ветку удаленный репозиторий считает «основной» (как правило, main или master).
Вот эта «смешанная» картина — локальные + удаленные ветки — и есть ключевая причина, почему git branch -a настолько удобен при диагностике и навигации.
Отличия локальных и удаленных веток в выводе git branch -a
Локальные ветки
Локальные ветки — это те, в которых вы реально можете сразу работать: коммитить, переключаться, сливать. В выводе git branch -a они выглядят просто:
* main
feature/login
bugfix/cart
Чтобы переключиться на одну из этих веток, достаточно:
git checkout feature/login
# или в современных версиях Git:
git switch feature/login
Комментарий:
# Переключаемся на локальную ветку feature/login
git switch feature/login
Удаленные ветки (remote-tracking branches)
Удаленные ветки — это не прямые ветки на сервере, а локальные ссылки, которые отражают состояние веток на удаленном репозитории на момент последнего обращения (fetch/pull).
В выводе git branch -a вы видите их так:
remotes/origin/main
remotes/origin/feature/login
remotes/origin/feature/profile
remotes/upstream/main
Где:
- origin и upstream — имена удаленных репозиториев;
- main, feature/login, feature/profile — имена веток на этих удаленных репозиториях.
Важно понимать:
- вы не можете коммитить напрямую в remotes/origin/feature/login;
- вы работаете только с локальными ветками;
- remote-tracking ветка нужна, чтобы Git знал, как выглядит ветка на сервере.
Чтобы на основе удаленной ветки создать локальную и начать с ней работать, вы делаете:
# Создаем локальную ветку feature/profile,
# основанную на удаленной remotes/origin/feature/profile,
# и сразу переключаемся в нее.
git checkout -b feature/profile origin/feature/profile
Комментарий:
# Локальная ветка будет называться feature/profile
# В качестве исходной используется удаленная ветка origin/feature/profile
git checkout -b feature/profile origin/feature/profile
После этого:
- в выводе git branch локальная ветка feature/profile появится отдельно;
- в выводе git branch -a вы увидите и локальную, и удаленную версии.
Как обновить список удаленных веток для git branch -a
Почему git branch -a может «не видеть» новую ветку на сервере
Бывает ситуация: коллега создал новую ветку на удаленном репозитории, а вы запускаете git branch -a и не видите ее в списке. Это нормальное поведение.
Причина проста:
- ваш локальный репозиторий хранит список удаленных веток в момент последнего обращения к серверу;
- если вы давно не делали git fetch или git pull, локальные remote-tracking ветки устаревают.
Обновление списка веток с помощью git fetch
Чтобы обновить список удаленных веток, выполните:
git fetch --all --prune
Комментарий:
# Обновляем информацию обо всех удаленных репозиториях (--all)
# Удаляем ссылки на ветки, которых уже нет на сервере (--prune)
git fetch --all --prune
После этого команда git branch -a покажет:
- новые ветки, которые появились на сервере;
- не будет показывать те ветки, которые уже удалены на сервере.
Если вы работаете только с origin, можно сделать короче:
git fetch origin --prune
Комментарий:
# Обновляем только репозиторий origin
git fetch origin --prune
Теперь давайте посмотрим, как использовать git branch -a в разных типичных сценариях.
Навигация по веткам с использованием git branch -a
Как найти нужную ветку в большом списке
В большом проекте список веток может быть очень длинным. Смотрите, я покажу вам удобный способ поиска.
Команда git branch поддерживает фильтрацию по шаблону через опцию --list. В сочетании с -a это работает так:
# Ищем все ветки, в имени которых есть слово login
git branch -a --list "*login*"
Комментарий:
# Выведет только те локальные и удаленные ветки,
# в имени которых содержится подстрока "login"
git branch -a --list "*login*"
Пример вывода:
feature/login
remotes/origin/feature/login
remotes/origin/bugfix/login-redirect
Как быстро понять, существует ли ветка только на сервере
Представим ситуацию:
- вы ожидаете увидеть ветку feature/payment;
- запускаете git branch и ее там нет;
- запускаете git branch -a и видите:
remotes/origin/feature/payment
Это означает:
- ветка существует на удаленном репозитории origin;
- локальной ветки с таким именем у вас еще нет.
Чтобы начать с ней работать локально, выполните:
git checkout -b feature/payment origin/feature/payment
Комментарий:
# Создаем локальную ветку feature/payment
# и указываем, что исходная точка - удаленная ветка origin/feature/payment
git checkout -b feature/payment origin/feature/payment
Теперь в списке:
- git branch покажет feature/payment как локальную ветку;
- git branch -a покажет и локальную, и удаленную версии.
Как отличить текущую ветку в выводе git branch -a
Во всех вариантах git branch, включая git branch -a, текущая ветка помечается звездочкой слева:
* main
feature/login
remotes/origin/main
remotes/origin/feature/login
Вы можете быстро:
- найти строку со звездочкой;
- понять, где вы сейчас находитесь;
- сравнить локальную текущую ветку с ее удаленным аналогом (если он есть).
Работа с несколькими удаленными репозиториями и git branch -a
Когда это нужно
Наличие нескольких удаленных репозиториев (remote) — довольно частая ситуация в open source и в сложных корпоративных проектах. Например:
- origin — ваш форк;
- upstream — оригинальный репозиторий.
git branch -a в этом случае помогает увидеть ветки сразу обоих удаленных.
Пример вывода:
* main
feature/local-change
remotes/origin/main
remotes/origin/feature/local-change
remotes/upstream/main
remotes/upstream/feature/global-update
Здесь вы видите:
- какие ветки есть в вашем форке (origin);
- какие ветки есть в основном репозитории (upstream).
Как посмотреть только ветки конкретного remote
Строго говоря, git branch -a сам по себе не фильтрует по remote, но вы можете использовать --list с шаблоном.
Например, чтобы увидеть только ветки origin:
git branch -a --list "remotes/origin/*"
Комментарий:
# Выводим только удаленные ветки, связанные с origin
git branch -a --list "remotes/origin/*"
Или только ветки upstream:
git branch -a --list "remotes/upstream/*"
Так вы можете быстро оценить структуру веток каждого удаленного репозитория.
Использование git branch -a при устранении проблем
Сценарий 1: «Ветка есть на GitHub, но я ее не вижу локально»
Часто услышите фразу вроде: «Я создал ветку на GitHub, но у меня ее нет». Давайте разберемся по шагам, как проверить ситуацию с помощью git branch -a.
Сначала проверьте, видит ли Git эту ветку среди удаленных:
git branch -aИщите строку вроде:
remotes/origin/feature/new-apiЕсли ветки нет — обновите информацию об удаленных ветках:
git fetch origin --pruneСнова проверьте:
git branch -aЕсли теперь ветка появилась как remotes/origin/feature/new-api, создайте локальную ветку:
git checkout -b feature/new-api origin/feature/new-api
Комментарий:
# 1. Обновляем данные об удаленном репозитории origin
git fetch origin --prune
# 2. Проверяем все ветки еще раз
git branch -a
# 3. Создаем локальную ветку на основе удаленной
git checkout -b feature/new-api origin/feature/new-api
Сценарий 2: «Я удалил ветку на сервере, но она все еще отображается в git branch -a»
Если вы или ваш коллега удалили ветку на сервере, но в выводе git branch -a она все еще есть, это значит, что локальная информация не обновлена.
Решение:
git fetch origin --prune
Комментарий:
# Обновляем состояние веток с сервера и удаляем устаревшие ссылки
git fetch origin --prune
После этого ветки, которых нет на сервере, исчезнут из списка remotes/origin/... в выводе git branch -a.
Сценарий 3: «Я хочу понять, есть ли у меня локальная ветка для конкретной удаленной»
Иногда вы видите в git branch -a:
remotes/origin/feature/reporting
и не уверены, есть ли у вас уже локальная ветка feature/reporting, отслеживающая эту удаленную.
Порядок действий:
Сначала посмотрите на локальные ветки:
git branchЕсли среди них есть feature/reporting, значит локальная ветка уже существует.
Если нет — создайте ее:
git checkout -b feature/reporting origin/feature/reporting
Комментарий:
# Проверяем только локальные ветки
git branch
# При отсутствии нужной ветки создаем новую на основе удаленной
git checkout -b feature/reporting origin/feature/reporting
Дополнительные полезные флаги, которые стоит знать вместе с -a
git branch -r — только удаленные ветки
Если вам нужно увидеть только удаленные ветки без локальных, используйте:
git branch -r
Комментарий:
# Показывает только remote-tracking ветки,
# то есть ветки, связанные с удаленными репозиториями
git branch -r
Пример вывода:
origin/HEAD -> origin/main
origin/main
origin/feature/login
origin/feature/payment
upstream/main
В связке с git branch -a вы можете быстро:
- одним взглядом увидеть всю картину (через -a);
- при необходимости сфокусироваться только на удаленных ветках (через -r).
git branch -vv — подробная информация о ветках
Когда вы хотите понять, какая локальная ветка к какой удаленной привязана, удобно использовать флаг -vv:
git branch -vv
Комментарий:
# Показывает локальные ветки с дополнительной информацией:
# - какая удаленная ветка отслеживается
# - какой последний коммит в каждой ветке
git branch -vv
Пример вывода:
* main 3a1b2c3 [origin/main] Merge pull request #12 from feature/login
feature/login 4d5e6f7 [origin/feature/login: ahead 2] Add remember-me option
bugfix/cart 8a9b0c1 [origin/bugfix/cart: behind 1] Fix null pointer in cart
Обратите внимание:
- [origin/main] — локальная ветка main отслеживает origin/main;
- ahead 2 — локальная ветка опережает удаленную на 2 коммита;
- behind 1 — локальная ветка отстает от удаленной на 1 коммит.
Хотя git branch -vv не показывает удаленные ветки сам по себе, в сочетании с git branch -a вы получаете полный обзор.
Сочетание -a и --list для фильтрации
Мы уже немного касались --list, давайте еще один пример.
Допустим, у вас десятки веток, и вы хотите посмотреть только ветки, относящиеся к релизам:
git branch -a --list "*release*"
Комментарий:
# Отфильтровываем список веток (локальных и удаленных),
# показывая только те, в имени которых есть "release"
git branch -a --list "*release*"
Вывод может быть таким:
release/1.2.0
remotes/origin/release/1.1.0
remotes/origin/release/1.2.0
remotes/origin/release/2.0.0
Это удобный способ ориентироваться в больших репозиториях.
Практические примеры использования git branch -a в рабочем процессе
Пример 1. Подготовка к работе над новой задачей из удаленной ветки
Ситуация:
- Тимлид создал ветку feature/invoice-generation на сервере;
- вы хотите начать в ней работать.
Последовательность действий:
# 1. Обновляем информацию о ветках на сервере
git fetch origin --prune
# 2. Проверяем, появилась ли ветка среди удаленных
git branch -a
# 3. Находим строку remotes/origin/feature/invoice-generation
# 4. Создаем локальную ветку и переключаемся на нее
git checkout -b feature/invoice-generation origin/feature/invoice-generation
Теперь:
- у вас есть локальная ветка feature/invoice-generation;
- она отслеживает origin/feature/invoice-generation;
- git branch -a покажет обе.
Пример 2. Анализ «загрязненного» репозитория с большим количеством веток
В монолитном репозитории часто десятки или сотни веток. Давайте посмотрим, как git branch -a помогает навести порядок или хотя бы понять структуру.
Сначала посмотрите весь список:
git branch -aЗатем отфильтруйте только нужные по шаблону:
# Все фича-ветки git branch -a --list "*feature*" # Ветки, связанные с релизами git branch -a --list "*release*"Если нужно увидеть только ветки origin:
git branch -a --list "remotes/origin/*"Если обнаружили удаленные ветки, которые, по идее, уже удалены на сервере — обновите состояние:
git fetch origin --prune
Так вы постепенно приводите локальное состояние веток в актуальный вид и лучше понимаете, что вообще существует в проекте.
Пример 3. Диагностика расхождения локальной и удаленной ветки
Ситуация:
- вы находитесь в ветке feature/login;
- подозреваете, что локальная ветка «ушла» от удаленной (или наоборот);
- хотите это подтвердить.
Что можно сделать:
Посмотрите базовую картину:
git branch -aУбедитесь, что есть:
- локальная feature/login;
- удаленная remotes/origin/feature/login.
Посмотрите подробную информацию о локальной ветке:
git branch -vvВ выводе, напротив feature/login, вы увидите, как она соотносится с origin/feature/login:
feature/login 4d5e6f7 [origin/feature/login: ahead 2, behind 1] ...Если видите, что локальная ветка отстает или опережает удаленную, дальше вы уже решаете, что делать (git pull, git push, rebase и т.д.), но сам факт расхождения вы определяете как раз с помощью комбинации git branch -a и git branch -vv.
Итоги по использованию git branch -a
Команда git branch -a — это удобный инструмент, который помогает:
- видеть одновременно локальные и удаленные ветки;
- ориентироваться в репозиториях с несколькими удаленными (origin, upstream и т.д.);
- быстро проверять, существует ли ветка только на сервере или уже есть локальная копия;
- диагностировать проблемы с «пропавшими» или «висящими» ветками;
- фильтровать ветки по шаблонам, когда их слишком много.
Чтобы использовать git branch -a максимально эффективно, полезно:
- не забывать периодически делать git fetch --all --prune, чтобы список удаленных веток был актуален;
- понимать разницу между локальными ветками и remote-tracking ветками (remotes/origin/...);
- комбинировать git branch -a с флагами -r, -vv и опцией --list.
Как видите, git branch -a — не просто «еще один флаг», а важный инструмент для навигации и анализа состояния веток в реальном рабочем процессе.
Частозадаваемые технические вопросы по теме статьи и ответы на них
Как скрыть удаленные ветки и посмотреть только локальные, если я уже привык работать с git branch -a?
Используйте классический вариант без флага -a:
git branch
# Показывает только локальные ветки
Если вы часто по привычке набираете git branch -a, можно добавить себе alias, например:
git config --global alias.b "branch"
# Теперь git b эквивалентен git branch
Как понять, какой удаленный репозиторий связан с конкретной веткой из списка git branch -a?
Для этого удобнее использовать:
git branch -vv
В выводе будет видно, какая локальная ветка отслеживает какой remote и какую ветку на нем (например [origin/feature/login]). Дополнительно можно посмотреть все удаленные через git remote -v, чтобы понять, какие URL стоят за именами origin и upstream.
Почему git branch -a показывает remotes/origin/HEAD и нужно ли с этим что-то делать?
Запись вида remotes/origin/HEAD -> origin/main — это служебная ссылка, которая указывает, какую ветку удаленный репозиторий считает основной. Обычно это main или master. Удалять или изменять ее вручную не нужно. Она помогает Git правильно выставлять дефолтную ветку при некоторых операциях (например, при клонировании).
Как удалить локальную ветку, если я нашел ее в git branch -a и понял, что она уже не нужна?
Сначала убедитесь, что вы не находитесь в этой ветке, затем выполните:
git branch -d feature/old-branch
Если Git откажется удалять ветку из-за неслитых изменений и вы точно уверены, что ветка больше не нужна, используйте:
git branch -D feature/old-branch
Флаг -D — это «жесткое» удаление без дополнительных проверок.
Можно ли с помощью git branch -a понять, с какого удаленного репозитория была склонирована ветка?
Напрямую — нет. git branch -a показывает только имена веток и их принадлежность к remote (origin, upstream и т.д.). Чтобы понять, откуда вообще был клонирован репозиторий и что за origin, выполните:
git remote -v
Вы увидите URL-адреса для fetch и push. В сочетании с именами вида remotes/origin/branch-name становится ясно, с какого сервера пришли эти ветки.
Постройте личный план изучения Git до уровня Middle — бесплатно!
Git — часть карты развития Frontend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Git
Лучшие курсы по теме

Основы Git
Антон Ларичев
TypeScript с нуля
Антон Ларичев