Отслеживающие ветки удалённых репозиториев
Отслеживающие ветки удалённых репозиториев — это локальные ссылки, которые отражают состояние веток в удалённом репозитории. Они выглядят как 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, чтобы получить актуальную картину происходящего на удалённом сервере