×

Blog

Différence entre git fetch et git pull

Quelle est la différence entre git pull et git fetch? Beaucoup d’utilisateur de Git ne saisissent pas cette différence qui est pourtant très importante et simple a comprendre vous allez voir.

Dans les deux cas, nous allons partir de la situation initiale suivante. Nous somme actuellement sur master qui correspond au commit C. Or, sur le serveur distant un membre de l’équipe a poussé son commit D. On se retrouve alors en local avec un commit de retard par rapport à origin.

 

situation initiale

 

Git fetch

La commande git fetch permet de récupérer les modifications présentes sur le serveur distant que vous n’avez pas encore sur votre copie en local. Cette commande vas alors mettre à jour dans votre dépôt local, l’ensemble des références distantes (branches, tags, …) et récupérer les commits associés.

git fetch

Attention: Cette commande ne vas pas appliquer, dans votre espace de travail, les modifications récupérées. Vous allez rester sur le commit courant. Dans notre exemple, nous somme actuellement sur le commit C (head->master->C) et la commande git fetch à fait évoluer simplement les références d’origin: ici origin/master.

Pour appliquer les modifications sur votre espace de travail, il faut ramener le master local sur le même commit que le master distant.

git merge origin master

Git pull

La commande git pull est légèrement différente de la commande git fetch. En fait, elle réalise deux actions à la suite:

  1. Git fetch
  2. Git merge [branche courante] [branche référent] 

git pull

Contrairement au git fetch, git pull vas modifier votre branche courante en la mergent avec sa référence du serveur distant. Attention, c’est uniquement pour la branche courante que cette dernière action est réalisée.

Dans notre exemple, nous avons donc une mise à jour en locale de la référence origin/master puis un merge automatique de master (branche courante) sur origin/master.

Attention: Selon l’état actuelle de votre espace de travail et votre historique, le merge vas soit créer un commit de merge soit réaliser un fast forward. Si vous souhaitez plutôt faire un rebase, il est possible d’ajouter, à la commande git pull, l’option –rebase

git pull –rebase

Conclusion

Pour conclure, la commande git fetch, met à jour toutes les références distantes sur votre dépôt local sans modifier vos références locales. Alors que la commande git pull fait la même chose que la commande git fetch, mais en plus, elle vas merge votre branche courante avec sa référence distante.

Si vous souhaitez en apprendre plus sur Git et Github, je vous conseille soit un bon livre ou encore mieux une bonne formation vidéo.
 

Voici ma petite sélection:
Pour ceux qui, comme moi, préfèrent une bonne formation vidéo avec plus de pratique que de théorie: Formation Vidéo
Pour les amoureux des livres
Pour les autres, La documentation officielle.