Просмотр веток в Git с помощью git branch -a

17 декабря 2025
Автор

Олег Марков

Введение

Команда 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

Обратите внимание на несколько моментов:

  1. Локальные ветки отображаются без префикса.

    • main
    • feature/login
    • bugfix/cart
  2. Удаленные ветки всегда начинаются с префикса remotes/:

    • remotes/origin/main
    • remotes/origin/feature/login
    • remotes/upstream/main
  3. В записи 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.

  1. Сначала проверьте, видит ли Git эту ветку среди удаленных:

    git branch -a
    

    Ищите строку вроде:

    remotes/origin/feature/new-api
    
  2. Если ветки нет — обновите информацию об удаленных ветках:

    git fetch origin --prune
    
  3. Снова проверьте:

    git branch -a
    
  4. Если теперь ветка появилась как 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, отслеживающая эту удаленную.

Порядок действий:

  1. Сначала посмотрите на локальные ветки:

    git branch
    
  2. Если среди них есть feature/reporting, значит локальная ветка уже существует.

  3. Если нет — создайте ее:

    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 помогает навести порядок или хотя бы понять структуру.

  1. Сначала посмотрите весь список:

    git branch -a
    
  2. Затем отфильтруйте только нужные по шаблону:

    # Все фича-ветки
    git branch -a --list "*feature*"
    
    # Ветки, связанные с релизами
    git branch -a --list "*release*"
    
  3. Если нужно увидеть только ветки origin:

    git branch -a --list "remotes/origin/*"
    
  4. Если обнаружили удаленные ветки, которые, по идее, уже удалены на сервере — обновите состояние:

    git fetch origin --prune
    

Так вы постепенно приводите локальное состояние веток в актуальный вид и лучше понимаете, что вообще существует в проекте.

Пример 3. Диагностика расхождения локальной и удаленной ветки

Ситуация:

  • вы находитесь в ветке feature/login;
  • подозреваете, что локальная ветка «ушла» от удаленной (или наоборот);
  • хотите это подтвердить.

Что можно сделать:

  1. Посмотрите базовую картину:

    git branch -a
    

    Убедитесь, что есть:

    • локальная feature/login;
    • удаленная remotes/origin/feature/login.
  2. Посмотрите подробную информацию о локальной ветке:

    git branch -vv
    
  3. В выводе, напротив feature/login, вы увидите, как она соотносится с origin/feature/login:

    feature/login   4d5e6f7 [origin/feature/login: ahead 2, behind 1] ...
    
  4. Если видите, что локальная ветка отстает или опережает удаленную, дальше вы уже решаете, что делать (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 - команда git branch -mСоздание ветки в Git - git branchСтрелочка вправо

Постройте личный план изучения Git до уровня Middle — бесплатно!

Git — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Git

Открыть базу знаний

Лучшие курсы по теме

изображение курса

Основы Git

Антон Ларичев
AI-тренажеры
Гарантия
Бонусы
иконка звёздочки рейтинга4.9
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий