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

Как посмотреть удалённые ветки в Git: полное руководство

·7 минут·

При работе в команде ветки создаются не только локально, но и на сервере (GitHub, GitLab и т.д.). Чтобы видеть ветки коллег и работать с ними, нужно понять концепцию удалённых веток и знать команды для их просмотра.

Что такое удалённые ветки #

Удалённые ветки — это ветки на сервере (origin, upstream или другом удалённом репозитории). В локальном Git они представлены как origin/main, origin/feature/auth и т.д.

Удалённый сервер (GitHub):
  main
  feature/auth
  feature/cart

Локально у вас:
  main            ← ваша локальная ветка main
  feature/auth    ← ваша локальная ветка feature/auth
  origin/main     ← локальная копия серверной ветки main
  origin/feature/auth   ← локальная копия серверной ветки
  origin/feature/cart   ← копия ветки, которой у вас нет локально

origin/main — это локальное представление того, как выглядела ветка main на сервере при последнем git fetch или git pull.

Просмотр всех веток (локальных и удалённых) #

git branch -a

# Пример вывода:
# * main                      ← текущая локальная ветка
#   feature/auth              ← другая локальная ветка
#   remotes/origin/main       ← удалённая ветка
#   remotes/origin/feature/auth
#   remotes/origin/feature/cart

Просмотр только удалённых веток #

git branch -r

# Вывод:
#   origin/HEAD -> origin/main
#   origin/main
#   origin/feature/auth
#   origin/feature/cart

С информацией о последнем коммите:

git branch -r -v
#   origin/main       a1b2c3d Last commit message
#   origin/feature/auth b4c5d6e Add authentication

Синхронизация информации с сервером #

Git не обновляет информацию об удалённых ветках автоматически. Нужно явно запросить:

git fetch

# Или для конкретного удалённого репо
git fetch origin

После fetch вы увидите новые ветки, которые создали коллеги. git fetch не изменяет ваши локальные ветки — только обновляет локальные представления удалённых веток (origin/*).

# Обновить информацию и удалить устаревшие ветки
git fetch --prune

# Показать что было обновлено
git fetch -v

Просмотр привязки локальных веток к удалённым #

git branch -vv

# Вывод:
# * main    a1b2c3d [origin/main] Last commit
#   feature b4c5d6e [origin/feature: ahead 2] Add feature
#   local-branch c7d8e9f (нет привязки к удалённой)

Значения в квадратных скобках: [origin/main] — ветка отслеживает origin/main. ahead 2 — у вас 2 коммита, которых нет на сервере. behind 1 — на сервере есть 1 коммит, которого у вас нет.

Просмотр подробной информации об удалённом репо #

git remote show origin

# Вывод:
# * remote origin
#   Fetch URL: [email protected]:user/repo.git
#   Push  URL: [email protected]:user/repo.git
#   HEAD branch: main
#   Remote branches:
#     main    tracked
#     feature/auth  tracked
#     feature/cart  tracked
#   Local branch configured for 'git pull':
#     main merges with remote main

Работа с удалёнными ветками #

Переключиться на удалённую ветку (создать локальную копию):

git switch feature/cart        # Git создаст локальную ветку, отслеживающую origin/feature/cart
# или
git checkout -b feature/cart origin/feature/cart  # явный синтаксис

Сравнить локальную ветку с удалённой:

git diff main origin/main

Просмотр коммитов в удалённой ветке:

git log origin/feature/auth --oneline

Удалить устаревшие локальные представления удалённых веток:

# Просмотр что будет удалено
git remote prune origin --dry-run

# Удалить
git remote prune origin

# Или при fetch:
git fetch --prune

Практические примеры #

# Просмотр всех веток (локальные и удалённые)
git branch -a

# Просмотр только удалённых веток
git branch -r

# С информацией о последних коммитах
git branch -r -v

# Просмотр локальных веток с информацией об отслеживании
git branch -vv

# Обновление информации об удалённых ветках
git fetch

# Обновление с удалением устаревших
git fetch --prune

# Все удалённые репозитории
git remote -v

# Коммиты в удалённой ветке
git log origin/main

# Сравнение локальной ветки с удалённой
git diff main origin/main

# Ветки, которые уже удалены на сервере
git remote prune origin --dry-run

# Подробная информация об удалённом репо
git remote show origin

Отслеживание удалённых веток #

Локальная ветка может отслеживать удалённую ветку. Это значит, что git pull и git push будут автоматически использовать эту удалённую ветку:

# При создании ветки из удалённой она автоматически отслеживает её
git switch feature/auth
# Branch 'feature/auth' set up to track 'origin/feature/auth'

# Проверить какие ветки отслеживают какие
git branch -vv
# * main    a1b2c3d [origin/main: up to date]
#   feature b4c5d6e [origin/feature/auth: ahead 2]
#   local   c7d8e9f (no tracking information)

# Информация в скобках:
# [origin/main] = отслеживает origin/main, синхронизирована
# [origin/feature/auth: ahead 2] = впереди на 2 коммита
# [origin/feature/auth: behind 1] = отстаёт на 1 коммит
# (no tracking information) = не отслеживает никакую удалённую ветку

Установка отслеживания после создания ветки #

Если ветка создана без отслеживания:

# Создать локальную ветку без отслеживания
git switch -c local-branch

# Позже установить отслеживание
git branch --set-upstream-to=origin/main
# Branch 'local-branch' set up to track 'origin/main'

# Или с помощью push -u
git push -u origin local-branch
# Branch 'local-branch' set up to track 'origin/local-branch'

# Теперь git pull и git push знают куда отправлять
git pull     # = git pull origin local-branch
git push     # = git push origin local-branch

Удаление удалённых веток #

Часто нужно удалить ветку с сервера:

# Удалить ветку на сервере
git push origin --delete feature/old-feature
# или
git push origin -d feature/old-feature

# Удалить несколько веток
git push origin -d feature/auth feature/cart feature/checkout

# Удалить все локальные представления удалённых веток которых больше нет
git remote prune origin

# Или при fetch
git fetch --prune

Удаление устаревших локальных представлений удалённых веток #

После удаления ветки на сервере, локальное представление может остаться:

# Посмотреть что будет удалено (сухой запуск)
git remote prune origin --dry-run
# Pruning origin
# * [would prune] origin/old-feature
# * [would prune] origin/deleted-branch

# Реально удалить
git remote prune origin

# Или при fetch автоматически удалить
git fetch --prune
git fetch -p    # сокращённо

# Конфигурировать git чтобы всегда удалять при fetch
git config --global fetch.prune true
# Или только для этого репо
git config fetch.prune true

Проверка отставания/опережения #

# Какие коммиты в удалённой ветке но не в локальной
git log origin/main..main
# Показывает коммиты которые нужно push

# Какие коммиты в локальной но не в удалённой
git log main..origin/main
# Показывает коммиты которые нужно pull

# Более удобный вывод
git log --oneline origin/main..main
git log --oneline main..origin/main

# Количество отличающихся коммитов
git rev-list --count main..origin/main
git rev-list --count origin/main..main

# Информация из git branch -vv проще и понятнее для обзора
git branch -vv
# * main    a1b2c3d [origin/main: behind 5]

Работа с удалёнными веткми при командной разработке #

Практический пример работы в команде:

# Ваш коллега создал новую ветку feature/payment на сервере
# Вы не видите её локально

# Обновить информацию с сервера
git fetch

# Теперь видите новую ветку
git branch -r
# * origin/main
#   origin/feature/auth
#   origin/feature/payment    ← новая!

# Переключиться на её локальную копию
git switch feature/payment
# Branch 'feature/payment' set up to track 'origin/feature/payment'

# Сделать свои изменения
echo "my changes" >> feature.js
git add feature.js
git commit -m "Add payment feature enhancement"

# Отправить обновленную ветку
git push

# Ваш коллега получает уведомление что вы push-нули в feature/payment
# Он делает git fetch и видит ваши изменения

Сравнение веток (локальной и удалённой) #

# Посмотреть разницу между веткой и её удалённой версией
git diff main origin/main

# Более детально
git diff --stat main origin/main

# Показать все коммиты разницы
git log -p main..origin/main

# Список изменённых файлов
git diff --name-only main origin/main

# Просмотр specific file
git diff main origin/main -- src/auth.js

Синхронизация локальных веток с удалёнными #

# Fast-forward слияние (если только добавлены коммиты на сервере)
git merge origin/main
# это безопасно, не создаёт merge коммит если возможен ff

# Или через rebase (переписать историю локальных коммитов)
git rebase origin/main
# Переместит ваши коммиты на top удалённых

# Pull = fetch + merge
git pull

# Pull с rebase вместо merge
git pull --rebase

# Конфигурировать pull всегда делать rebase
git config pull.rebase true

Часто задаваемые вопросы #

Что означает origin в удалённых ветках? Origin — это стандартное имя основного удалённого репозитория. Устанавливается при git clone. Можно иметь несколько удалённых репо с разными именами (origin, upstream и т.д.).

Почему я не вижу ветку коллеги в git branch -r? Потому что информация устарела. Запустите git fetch для синхронизации с сервером.

Как скачать удалённую ветку? git switch имя-ветки — Git автоматически создаст локальную ветку, отслеживающую одноимённую удалённую.

Какая разница между git fetch и git pull? git fetch только обновляет информацию об удалённых ветках, не меняя ваши локальные ветки. git pull = git fetch + git merge.

Как удалить локальное представление удалённой ветки? git remote prune origin удалит устаревшие origin/* ветки, которых больше нет на сервере.

Что означает отслеживание ветки? Отслеживание означает что локальная ветка привязана к удалённой ветке. Тогда git pull и git push автоматически знают с какой удалённой веткой работать.

Заключение #

Для просмотра удалённых веток: git branch -a (все ветки) или git branch -r (только удалённые). Не забывайте делать git fetch перед просмотром — иначе информация может быть устаревшей.

Следующие шаги: переключение на удалённую ветку, git fetch, git pull.