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 martwychorigin/*).--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 (zwykleorigin) dla bieżącej gałęzi i aktualizuje referencje śledzące.git fetch origin— jawnie ściąga wszystko z repozytoriumorigin.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.