Sinossi
git fetch [<options>] [<remote> [<refspec>...]]
Descrizione
Il comando git fetch scarica nuovi commit, file e ref da un repository remoto nel tuo repo locale, ma NON li mergia nel tuo branch di lavoro. Dopo il fetch, i ref di tracking remoto (come origin/main) sono aggiornati, e puoi ispezionare cosa c'è di nuovo con git log origin/main prima di decidere di mergiare o rebase.
Il fetching è sicuro — non modifica mai la tua working tree o il branch corrente. Molti utenti preferiscono git fetch seguito da un esplicito git merge o git rebase rispetto a git pull, perché dà un chiaro passo di anteprima. Usa --all per fare fetch da ogni remote configurato.
Nell'uso quotidiano, git fetch si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
--all | Fa fetch da tutti i remote configurati. |
--prune / -p | Rimuove ref di tracking remoto che non esistono più upstream. |
--tags | Scarica tutti i tag dal remote. |
--depth=<n> | Limita la profondità della storia scaricata (crea/mantiene un clone shallow). |
--unshallow | Converte un clone shallow in uno completo. |
--dry-run | Mostra cosa verrebbe scaricato. |
--force / -f | Permette aggiornamenti non fast-forward dei ref. |
Esempi
git fetch
# Aggiorna i ref di tracking remoto da origin
git fetch --all --prune
# Aggiorna da ogni remote e pulisce branch obsoleti
git fetch upstream main
# Scarica solo il branch main da upstream
git fetch --unshallow
# Riempie la storia completa in un clone shallow
Errori comuni
Confondere git fetch con git pull è comune: fetch scarica solo, mentre pull scarica e mergia. Dimenticare --prune lascia una lunga lista di tracking branch obsoleti nel tempo. Configura fetch.prune = true globalmente per rendere il pruning automatico.
Comandi correlati
git pull, git merge, git remote, git ls-remote