git fetch

Partager et mettre à jour

Télécharger des objets et des références depuis un autre dépôt


La commande 'git fetch' télécharge les commits, fichiers et références d’un dépôt distant dans votre dépôt local. Elle permet de voir sur quoi les autres ont travaillé sans fusionner ces modifications dans vos branches locales. Contrairement à 'git pull', fetch est sans danger - il ne modifie jamais votre répertoire de travail ni votre branche courante. Après un fetch, vous pouvez relire les modifications et décider de les fusionner ou non.

Synopsis

git fetch [<options>] [<repository> [<refspec>...]]
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)...]
git fetch --all [<options>]
[ ] facultatif| ou<arg> valeur à remplacer... répétable--flag option

Options

Cliquez sur une option pour la déplier

Débutant (4)

Faire un fetch de tous les dépôts distants configurés d’un coup. Utile quand vous avez plusieurs dépôts distants comme origin et upstream.

Si nécessairePratique avec plusieurs dépôts distants (fork + upstream) ; un fetch simple n’en couvre qu’un

Exemple

git fetch --all

Avant le fetch, retirer les branches de suivi distantes qui n’existent plus sur le dépôt distant. Garde votre dépôt propre.

RecommandéSupprime les références origin/* périmées des branches supprimées sur le dépôt distant

Exemple

git fetch --prune

Récupérer tous les tags du dépôt distant, en plus de tout ce qui serait récupéré de toute façon. Utile pour obtenir les tags de release.

Si nécessaireLes tags des commits récupérés arrivent déjà ; utilisez-la pour les tags posés sur un autre historique

Exemple

git fetch --tags

Montrer ce qui serait fait, sans rien modifier. Utile pour prévisualiser ce que fetch va télécharger.

Si nécessairePrévisualise quelles références seraient mises à jour, sans rien changer

Exemple

git fetch --dry-run

Intermédiaire (1)

Limiter le fetch au nombre de commits indiqué depuis la pointe de chaque branche distante. Dans un clone superficiel, cela approfondit ou raccourcit l’historique.

Si nécessaireFait gagner du temps en CI ou sur d’énormes dépôts, mais un historique superficiel limite log et merge-base

Exemple

git fetch --depth=1

Choisir la bonne option

Fetch ou pull

Comprendre la différence essentielle entre fetch et pull

CommandeTélécharge les commitsMet à jour la branche localeSans danger à tout moment
git fetchOuiNon - seulement le suivi distantOui - ne touche jamais au répertoire de travail
git pullOuiOui - fusionne dans la courantePrudence - peut provoquer des conflits
git pull --rebaseOuiOui - rebase la courantePrudence - réécrit les commits locaux

Options de fetch pour le nettoyage

Des options pour garder votre dépôt en ordre

CommandeRetire les branches périméesRécupère les tagsCas d’usage
git fetchNoCertains (accessibles)Mise à jour standard
git fetch --pruneOuiCertains (accessibles)Nettoyer les branches supprimées
git fetch --tagsNoTous les tagsRécupérer les tags de release
git fetch --prune --tagsOuiTous les tagsNettoyer les branches + récupérer tous les tags (les tags locaux sont gardés)

Portée du fetch

Contrôler ce qui est récupéré

CommandeRécupère depuisIdéal pour
git fetchDépôt distant par défaut (origin)Usage le plus courant
git fetch originUn dépôt distant précisQuand vous avez plusieurs dépôts distants
git fetch --allTous les dépôts distantsSynchroniser un fork avec upstream
git fetch origin mainUne seule brancheTéléchargement minimal

Exemples

Fetch depuis le dépôt distant par défaut

git fetch

Télécharge les nouveaux commits du dépôt distant par défaut (en général 'origin') sans fusionner.


Fetch depuis un dépôt distant précis

git fetch origin

Faire explicitement un fetch depuis le dépôt distant 'origin'.


Fetch de tous les dépôts distants

git fetch --all

Faire un fetch de tous les dépôts distants configurés d’un coup.


Fetch et élagage des branches périmées

git fetch --prune

Faire un fetch et retirer les branches de suivi distantes qui n’existent plus sur le dépôt distant.

Exemples de workflows

1
git fetch origin

Télécharger les modifications distantes sans fusionner

2
git log main..origin/main

Voir les commits distants absents de votre branche locale

3
git diff main...origin/main

Relire les modifications de code faites à distance

4
git merge origin/main

Fusionner quand vous êtes prêt

1
git remote add upstream <original-repo-url>

Ajouter le dépôt original comme upstream (une seule fois)

2
git fetch upstream

Récupérer les dernières nouveautés du dépôt original

3
git checkout main

Passer sur votre branche main

4
git merge upstream/main

Fusionner les modifications d’upstream dans votre fork

5
git push origin main

Pousser le fork à jour vers votre GitHub

1
git fetch --prune

Faire un fetch et retirer les branches de suivi distantes périmées

2
git branch -vv

Voir les branches locales et leur état de suivi

3
git branch -d old-feature

Supprimer les branches locales qui suivaient des branches distantes supprimées

Dépannage

fatal: 'origin' does not appear to be a git repository

Cause : Aucun dépôt distant nommé 'origin' n’est configuré

Vérifiez les dépôts distants avec 'git remote -v'. Ajoutez-en un avec 'git remote add origin <url>'

Fetch fait mais ma branche locale ne s’est pas mise à jour

Cause : Fetch ne met à jour que les branches de suivi distantes, pas les branches locales

C’est normal ! Lancez 'git merge origin/main' ou 'git pull' pour mettre à jour votre branche locale

error: cannot lock ref - unable to update local ref

Cause : Une référence de suivi distante périmée entre en collision avec un nouveau nom de branche (par ex. 'feature' et 'feature/login')

Lancez 'git remote prune origin' ou 'git fetch --prune' pour retirer les références périmées, puis refaites un fetch

Des branches distantes supprimées apparaissent toujours

Cause : Il faut élaguer les branches de suivi distantes périmées

Utilisez 'git fetch --prune' ou 'git remote prune origin'

Le fetch est très lent ou télécharge trop

Cause : Vous récupérez tout l’historique alors que seuls les commits récents vous servent

Utilisez 'git fetch --depth=1' pour un fetch superficiel, ou ne récupérez qu’une branche précise

Astuces et pièges

Bonnes pratiques

  • ✓Faites un fetch avant de commencer à travailler pour voir s’il y a des modifications distantes à connaître
  • ✓Utilisez --prune régulièrement pour débarrasser votre dépôt des branches périmées
  • ✓Préférez fetch + merge à pull quand vous voulez relire les modifications avant de les intégrer
  • ✓Configurez 'git config fetch.prune true' pour élaguer à chaque fetch
  • ✓Utilisez 'git fetch --all' quand vous travaillez avec des forks, pour synchroniser à la fois origin et upstream

Erreurs fréquentes

  • ✗S’attendre à ce que fetch mette à jour votre répertoire de travail - il ne met à jour que les branches de suivi distantes, pas vos branches locales.
  • ✗Oublier de faire un merge ou un rebase après le fetch - fetch télécharge mais n’intègre pas les modifications.
  • ✗Ne pas utiliser --prune régulièrement, ce qui laisse des branches de suivi distantes périmées encombrer votre dépôt.
  • ✗Confondre fetch et pull - pull = fetch + merge, alors que fetch n’est que l’étape de téléchargement.

FAQ

A:

Fetch télécharge les commits mais ne change pas vos branches locales. Pull = fetch + merge (ou rebase). Fetch est plus sûr, car il vous laisse relire les modifications avant de les intégrer.

A:

Fetch ne met à jour que les branches de suivi distantes (comme origin/main), pas vos branches locales. Il faut un merge ou un rebase pour mettre à jour votre branche locale.

A:

Utilisez 'git log main..origin/main' pour voir les commits distants absents de votre branche locale, ou 'git diff main...origin/main' pour voir les modifications de code faites à distance.

A:

Fetch quand vous voulez d’abord relire les modifications ou que vous travaillez sur des branches importantes. Pull pour des mises à jour rapides quand vous faites confiance aux modifications entrantes.

A:

Utilisez 'git fetch origin branch-name' pour ne récupérer que cette branche. Utile pour les gros dépôts où vous n’avez pas besoin de tout.

A:

Il retire les branches de suivi distantes qui n’existent plus sur le dépôt distant. Garde votre dépôt propre quand vos collègues suppriment des branches fusionnées.