git fetch

Pobiera obiekty i referencje ze zdalnego repozytorium bez scalania.

git fetch ściąga do Twojego lokalnego repozytorium nowe commity, gałęzie i tagi z repozytorium zdalnego (najczęściej origin), ale niczego nie scala i nie rusza Twojej aktualnej gałęzi roboczej. To bezpieczny zwiad: aktualizuje tzw. remote-tracking branches (np. origin/main), żebyś mógł zobaczyć, co działo się u innych, zanim cokolwiek zmergujesz. Dzięki temu możesz najpierw obejrzeć zmiany, a dopiero potem świadomie zdecydować o merge czy rebase.

Składnia i najważniejsze opcje

Podstawowa forma to: git fetch []

  • --all — pobiera ze wszystkich skonfigurowanych zdalnych repozytoriów, nie tylko z jednego.
  • --prune (skrót -p) — usuwa lokalne referencje do gałęzi zdalnych, które już nie istnieją na serwerze (posprzątanie martwych origin/*).
  • --prune-tags — czyści również lokalne tagi, których nie ma już w remote (działa razem z --prune).
  • --tags (skrót -t) — pobiera wszystkie tagi z danego remote oprócz standardowych obiektów.
  • --depth= — ogranicza historię do n ostatnich commitów (przydatne przy shallow clone, np. w CI).
  • --dry-run — pokazuje, co zostałoby pobrane, ale nic faktycznie nie zapisuje.
  • -v / --verbose — więcej szczegółów w wypisce, gdy chcesz wiedzieć, co dokładnie się dzieje.

Przykłady użycia

  • git fetch — pobiera zmiany z domyślnego remote (zwykle origin) dla bieżącej gałęzi i aktualizuje referencje śledzące.
  • git fetch origin — jawnie ściąga wszystko z repozytorium origin.
  • git fetch --all --prune — aktualizuje wszystkie remote i od razu wyrzuca martwe gałęzie zdalne, których ktoś już nie ma.
  • git fetch origin main — pobiera tylko jedną konkretną gałąź zamiast wszystkiego.
  • git fetch --tags — dociąga tagi, np. żeby mieć lokalnie wszystkie wersje wydań.

Częste błędy i pułapki

Najczęstsze nieporozumienie: ludzie mylą git fetch z git pull. pull to w praktyce fetch + merge (lub rebase) i od razu modyfikuje Twoją gałąź. Samo fetch niczego nie scala — po nim Twój kod wygląda tak samo, dopóki sam nie zrobisz git merge albo git rebase. Druga pułapka: jeśli ktoś skasował gałąź na serwerze, lokalnie nadal widzisz starą origin/feature, dopóki nie dodasz --prune. Warto też ustawić fetch.prune=true w konfiguracji, żeby sprzątanie działo się automatycznie. I pamiętaj: fetch nie tworzy ani nie aktualizuje gałęzi lokalnych roboczych — dotyka tylko referencji śledzących.

Powiązane komendy: git pull, git merge, git rebase, git remote, git branch.