linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Удалённые репозитории/tracking-branch

kb/remote ── Удалённые репозитории ── beginner

Tracking branch

Связь между локальной веткой и удалённой: «эта моя ветка следит за этой удалённой». Включает поведение `git pull`/`push` без аргументов и `git status` сообщения вида «ahead 3, behind 2».

view as markdownaka: tracking-branches, upstream-tracking

Tracking branch (она же «upstream branch») - это указатель внутри локальной ветки на «свою» удалённую. Хранится в .git/config:

[branch "main"]
    remote = origin
    merge = refs/heads/main

Это значит: «локальная main привязана к origin/main». Что это даёт:

  • git pull без аргументов знает, откуда тянуть.
  • git push без аргументов знает, куда пушить.
  • git status сравнивает с этой удалённой: «Your branch is ahead by 3 commits».
  • В git branch -vv рядом с веткой видно её upstream.

Как устанавливается

Три способа:

bash
# 1. При первом push
git push -u origin feature
# эквивалент: git push --set-upstream origin feature
# 2. Постфактум для существующей ветки
git branch --set-upstream-to=origin/feature feature
# 3. При switch -c из remote
git switch -c feature origin/feature

После любого из этих способов ветка «привязана», и дальнейшие git pull / git push работают без аргументов.

remote-tracking branch - это отдельное

Не путай:

  • Tracking branch - локальная ветка, помнящая свою remote (упомянуто выше).
  • Remote-tracking branch - origin/main, origin/feature/x. Это локальные refs, отражающие состояние remote (см. fetch).

Их связь:

локальная main  ─ tracks ─→  origin/main (remote-tracking branch)
                                     ↑
                                     fetch обновляет это

Что показывает git status

On branch feature
Your branch is ahead of 'origin/feature' by 2 commits.

Это значит:

  • У тебя есть 2 коммита, которых нет в origin/feature.
  • Нужно push'нуть.
Your branch is behind 'origin/feature' by 3 commits.
  • На remote есть 3 коммита, которых у тебя нет.
  • Нужно pull или fetch.
Your branch and 'origin/feature' have diverged,
and have 2 and 3 different commits each, respectively.
  • И у тебя, и на remote есть свои коммиты после общего предка.
  • Нужно решать: merge, rebase или нагнать чужие и переписать свои.

Без tracking

Если у локальной ветки нет upstream:

bash
git push
# fatal: The current branch feature has no upstream branch.
# To push the current branch and set the remote as upstream, use
#     git push --set-upstream origin feature

Это специально: Git не угадывает, куда пушить новую ветку. Нужно явно сказать -u origin feature.

Подводные камни

  • Tracking теряется при переименовании remote. Если сделать git remote rename origin foo, у локальных веток branch.X.remote = origin останется, и pull/push сломаются. git remote rename обычно это правит, но проверь после.
  • «Ghost» tracking после удаления remote-ветки. Если ветку на remote удалили, локальный tracking остаётся «привязан» к несуществующей. git fetch --prune убирает мёртвые refs.
  • Конфиг отдельно от состояния. В .git/config пишется, кому тебя пушить. А actual SHA лежит в refs/remotes/origin/<branch>. Если refs устарели - git fetch.

§ команды

bash
git push -u origin feature

Установить tracking при первом push

bash
git branch --set-upstream-to=origin/dev

Привязать существующую ветку к origin/dev

bash
git branch -vv

Показать все локальные ветки с их upstream

bash
git status

Видит tracking - пишет 'ahead N / behind M'

§ см. также

  • pushgit pushОтправляет локальные коммиты в удалённый репозиторий и обновляет там ветку. Если remote получил коммиты от кого-то другого после твоего последнего pull - push откажется, пока не синхронизируешься.
  • pullgit pullЗатаскивает обновления с удалённого репозитория и сразу сливает с текущей веткой. По сути - `git fetch` + `git merge` (или + `git rebase` с `--rebase`). Самая запутанная команда для новичков.
  • fetchgit fetchСкачивает обновления с remote, но **не трогает** локальные ветки. Обновляет только refs/remotes/origin/. Безопасная команда: после fetch ты видишь, что пришло, и решаешь, что с этим делать.
  • remote-cmdgit remoteУправляет списком URL-ов, с которыми связан репозиторий. По умолчанию после `clone` один remote по имени `origin`. Можно добавить второй (`upstream` для fork-flow), удалить, переименовать.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки