Тур по Git
Работа с удалёнными репозиториями / Урок 4.7

Отслеживающие ветки удалённых репозиториев

Отслеживающие ветки удалённых репозиториев — это локальные ссылки, которые отражают состояние веток в удалённом репозитории. Они выглядят как origin/main, origin/feature и т.д. Вы не можете коммитить в них напрямую — они обновляются автоматически при выполнении fetch или pull.

Что это такое?

Каждый раз, когда вы взаимодействуете с удалённым репозиторием (fetch, pull, push, clone), Git обновляет эти специальные ссылки, чтобы отразить позиции веток на удалённом сервере. Они служат закладками, показывающими «где была эта ветка, когда я последний раз проверял?»

main           → ваша локальная ветка (вы работаете здесь)
origin/main    → последнее известное состояние main на origin
origin/feature → последнее известное состояние feature на origin

Просмотр отслеживающих веток

Показать все отслеживающие ветки удалённых репозиториев:

git branch -r

Показать все ветки (локальные и отслеживающие):

git branch -a

Посмотреть, куда указывает каждая ветка:

git branch -vv

Вывод -vv показывает, какая локальная ветка отслеживает какую удалённую ветку:

  main    abc1234 [origin/main] Сообщение последнего коммита
* feature def5678 [origin/feature: ahead 2] Моя новая работа

Как они обновляются

Отслеживающие ветки обновляются в определённых ситуациях:

  • git fetch — Скачивает и обновляет все отслеживающие ветки
  • git pull — Выполняет fetch (обновляя отслеживающие ветки), затем сливает
  • git push — После успешного push отслеживающая ветка перемещается вперёд
  • git clone — Настраивает все отслеживающие ветки из клонированного удалённого репозитория

Они не обновляются автоматически. Если коллега отправит новые коммиты, ваш origin/main по-прежнему будет указывать на прежнюю позицию, пока вы не выполните fetch.

Upstream-отслеживание

Локальную ветку можно настроить на «отслеживание» удалённой ветки, сделав её upstream-веткой. Это позволяет использовать сокращённые команды:

git push -u origin main

После настройки upstream работают следующие сокращённые команды:

git push        # вместо git push origin main
git pull        # вместо git pull origin main
git status      # показывает информацию «ahead/behind»

Впереди и позади

Когда ваша локальная ветка отслеживает удалённую ветку, Git может показать, как они расходятся:

git status
# On branch main
# Your branch is ahead of 'origin/main' by 2 commits.
  • Ahead by N — У вас есть N локальных коммитов, ещё не отправленных
  • Behind by N — В удалённом репозитории есть N коммитов, которые вы ещё не слили
  • Diverged — На обеих сторонах есть новые коммиты (потребуется слияние или rebase)
Впереди на 2:
  origin/main:  A --- B
  local main:   A --- B --- C --- D

Позади на 3:
  origin/main:  A --- B --- C --- D --- E
  local main:   A --- B

Расхождение (впереди на 1, позади на 2):
  origin/main:  A --- B --- D --- E
  local main:   A --- B --- C

Ключевые выводы

  • Отслеживающие ветки — это доступные только для чтения снимки состояния удалённого репозитория
  • Они находятся в вашем локальном репозитории, но вы не коммитите в них
  • Они обновляются при выполнении fetch, pull, push или clone
  • Настройка upstream позволяет использовать сокращённые команды и видеть статус ahead/behind
  • Всегда выполняйте fetch, чтобы получить актуальную картину происходящего на удалённом сервере