On lit souvent « git pull », et beaucoup de gens risquent de conseiller d’utiliser cette commande pour se tenir à jour… Cependant cette commande n’est rien d’autre qu’une aide par dessus les vrais outils de synchronisation fournis par Git, et elle possède des limitations qu’il vaut mieux ne pas ignorer.

La commande git pull est un raccourci, donc traitez-la comme telle

La commande git pull est juste un raccourci pour git fetch + git merge (ou git rebase, selon votre configuration).

Je résume donc l’utilisation de cette commande

# git pull origin master
git fetch origin
git merge origin/master
# git pull --rebase origin master
git fetch origin
git rebase origin/master

Bon, encore une fois, il est possible d’omettre les arguments relatifs au dépôt et à la branche, mais dans ce cas le comportement dépendra de votre configuration. De plus, vous pouvez configurer git pull pour qu’il effectue un --rebase automatiquement.

Le point que je veux mettre en avant ici, c’est que vous faites 3 choses avec une seule commande :

  1. mise à jour de la vue du dépôt distant, puis
  2. merge des changements dans votre branche locale, ou
  3. rebase de votre branche locale sur la distante.

Tout ça en une seule commande. Sérieusement, je pense que c’est une des pire manière d’appréhender Git : vous préservez le côté magique de l’outil.

Bien entendu, si vous êtes déjà à l’aise, il est tout à fait possible de l’utiliser de temps en temps comme raccourci. Cependant je ne peux que vous conseiller de vous familiariser avec git fetch.

Apprenez à utiliser git fetch

Le problème que pose une utilisation exclusive de git pull est que le seul moment où vous synchronisez votre vue des autres dépôts est celui où vous vous mettez à jour. Donc comment faire lorsque vous travaillez sur une branche ? Vous lancez des rebase réguliers, histoire de ? Que faites-vous si vous avez plusieurs dépôts ?

Une réponse simple : utiliser la commande qui sert justement à mettre à jour votre vue du monde extérieur.

Vous pouvez lancer git fetch sans risque, elle ne cassera rien. À vrai dire vous pourriez la mettre dans un cron pour qu’elle se lance toutes les minutes, voir coder un mécanisme basé sur les hooks pour qu’elle soit lancé automatiquement en cas de push sur un dépôt1.

Prochain article : Réécrire l’histoire.


  1. Bien sûr vous pourriez, mais ça ne serait pas une si bonne idée : évitez au maximum les trucs qui se passent dans votre dos.