У Git три види гілок, і їх часто плутають:
| Що | Приклад | Хто змінює |
|---|---|---|
| локальна гілка | main, feature/export |
ви, комітами |
| віддалена гілка (remote-tracking) | origin/main |
лише git fetch/pull/push - це «знімок» стану сервера на момент останньої синхронізації |
| гілка на сервері | main у репозиторії на GitHub |
інші учасники через push |
Upstream (відстежувана гілка) - зв'язок локальної гілки з віддаленою. Він дозволяє писати просто git push і git pull без параметрів і показує розбіжність:
git status
# Your branch is ahead of 'origin/main' by 2 commits.
Нова локальна гілка upstream не має - тому перший git push відповідає:
fatal: The current branch feature/export has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin feature/export
git push -u origin feature/export # -u = --set-upstream
Після цього git push і git pull працюють без аргументів.
Автоматизація: з git config --global push.autoSetupRemote true перший git push сам створює гілку на сервері й налаштовує upstream.
Корисні команди:
git branch -vv # усі гілки з їхнім upstream і розбіжністю
git branch -u origin/main # задати upstream для поточної гілки
git switch feature/export # якщо локальної гілки немає, а origin/feature/export є -
# Git створить її з upstream автоматично
git fetch --prune # прибрати origin/* гілки, видалені на сервері
Типова плутанина: origin/main не оновлюється сам. Якщо git status каже «up to date with 'origin/main'», це означає «збігається з тим, що ви бачили під час останнього fetch», а не з поточним станом сервера.