git pull
La commande git pull
est utilisée pour faire un fetch du contenu d'un dépôt distant et pour le télécharger, puis pour mettre à jour immédiatement le dépôt local qui correspond à ce contenu. Faire un merge des changements en amont dans votre dépôt local est une tâche courante dans les workflows Git. La commande git pull
est en fait la combinaison de deux autres commandes, git fetch suivie de git merge. Lors de la première étape, git pull
exécute une commande git fetch
étendue à la branche locale vers laquelle HEAD
pointe. Une fois le contenu téléchargé, git pull
entre un workflow de merge. Un nouveau commit de merge est créé et HEAD
est mis à jour pour pointer vers le nouveau commit.
Utilisation de la commande git pull
Fonctionnement
La commande git pull
exécute d'abord git fetch
qui télécharge le contenu du dépôt distant spécifié. Ensuite, une commande git merge
est exécutée pour faire un merge des réfs et des heads du contenu distant dans un nouveau commit de merge local. Pour mieux démontrer le processus de pull et de merge, considérons l'exemple suivant. Imaginons que nous ayons un dépôt avec une branche principale (main) et une origine distante.
Dans ce scénario, git pull
téléchargera tous les changements à partir du point où la branche locale et la branche principale ont divergé. Dans cet exemple, ce point est E. git pull
fera un fetch des commits distants divergents qui sont A-B-C. Le processus de pull créera alors un commit de merge local qui inclura le contenu des nouveaux commit distants divergents.
Ressource connexe
Commande git log avancée
DÉCOUVRIR LA SOLUTION
Découvrir Git avec Bitbucket Cloud
Dans le diagramme ci-dessus, nous voyons le nouveau commit H. Ce commit est un nouveau commit de merge qui contient le contenu des commit A-B-C distants et possède un message de log combiné. Cet exemple est l'une des quelques stratégies de merge git pull
. Une option --rebase
peut être transmise à git pull
pour utiliser une stratégie de merge de rebase au lieu d'un commit de merge. L'exemple suivant montrera comment fonctionne un pull de rebase. Supposons que nous sommes à un point de départ de notre premier diagramme, et que nous avons exécuté la commande git pull --rebase
.
Dans ce schéma, nous pouvons maintenant voir qu'un pull de rebase ne crée pas le commit H. Au lieu de cela, le rebase a copié les commits distants A--B--C, puis réécrit les commits locaux E--F--G pour qu'ils apparaissent à la suite des premiers dans l'historique local du commit origin/main.
Options communes
git pull <remote>
Faites un fetch de la copie de la branche actuelle du dépôt spécifié et mergez-la immédiatement dans la copie locale. Le process est identique à git fetch <remote>
suivi de git merge origin/<current-branch>
.
git pull --no-commit <remote>
Comme l'invocation par défaut, fait un fetch du contenu distant mais ne crée pas de nouveau commit de merge.
git pull --rebase <remote>
Comme dans le pull précédent, au lieu d'utiliser git merge
pour intégrer la branche distante avec la branche locale, utilisez git rebase
.
git pull --verbose
Fournit une sortie « verbose » lors d'un pull qui affiche le contenu téléchargé et les détails du merge.
Discussion sur la commande git pull
Vous pouvez considérer git pull
comme la version Git de svn update
. Cela permet de synchroniser facilement votre dépôt local avec les changements en amont. Le schéma suivant explique toutes les étapes du processus de pull.
Vous pensez d'abord que votre dépôt est synchronisé, mais git fetch
révèle que la version d'origine de la branche principale a évolué depuis la dernière fois que vous l'avez consultée. Ensuite, git merge
intègre immédiatement la branche principale distante dans la branche principale locale.
Git pull et synchronisation
git pull
est l'une des nombreuses commandes qui revendiquent la responsabilité de « synchroniser » le contenu distant. La commande git remote
est utilisée pour spécifier les points de terminaison distants sur lesquels les commandes de synchronisation agiront. La commande git push
permet de télécharger du contenu sur un dépôt distant.
La commande git fetch
peut être confondue avec git pull
. Elles sont toutes deux utilisées pour télécharger du contenu distant. Une distinction de sécurité importante peut être faite entre les commandes git pull
et git fetch
. git fetch
peut être considérée comme l'option « sûre », alors que git pull
peut être considérée comme l'option « dangereuse ». git fetch
téléchargera le contenu distant et ne changera pas l'état du dépôt local. En revanche, git pull
téléchargera le contenu distant et tentera immédiatement de changer l'état local pour qu'il corresponde à ce contenu. Ceci peut involontairement provoquer un conflit d'état avec le dépôt local.
Pull via l'option rebase
L'option --rebase
peut être utilisée pour obtenir un historique linéaire en évitant les commits de merge superflus. De nombreux développeurs préfèrent le rebase au merge, puisque cela revient à dire, « Je veux donner la priorité à mes changements ». En ce sens, utiliser git pull
avec le flag --rebase
s'apparente plus à svn update
qu'à un git pull
brut.
En effet, le pull avec --rebase
est un workflow si courant qu'il existe une option de configuration dédiée :
git config --global branch.autosetuprebase always
Une fois cette commande lancée, toutes les commandes git pull
s'intègrent via git rebase
au lieu de git merge
.
Exemples de Git pull
Les exemples suivants illustrent l'utilisation de la commande git pull
dans des scénarios courants :
Comportement par défaut
git pull
Exécuter l'invocation par défaut de git pull
équivaut à git fetch origin HEAD
et git merge HEAD
où HEAD
est la réf pointant vers la branche actuelle.
Commande git pull sur des branches distantes
git checkout new_feature
git pull <remote repo>
Cet exemple effectue d'abord un checkout et passe à la branche git pull
est exécutée avec le dépôt git merge
est exécutée.
Git pull de rebase à la place de merge
L'exemple suivant montre comment effectuer une synchronisation avec la branche principale (main) du dépôt centralisé grâce à un rebase :
git checkout main
git pull --rebase origin
Cette opération donne simplement la priorité à vos changements locaux par rapport aux contributions des autres personnes.
Partager cet article
Thème suivant
Lectures recommandées
Ajoutez ces ressources à vos favoris pour en savoir plus sur les types d'équipes DevOps, ou pour les mises à jour continues de DevOps chez Atlassian.