Close

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.

Fenêtre de console
Ressource connexe

Commande git log avancée

Logo Bitbucket
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.

Du dépôt git central au dépôt git local

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.

git 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 HEADHEAD 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 . Ensuite, la commande git pull est exécutée avec le dépôt transmis. Ceci aura pour effet implicite de faire un pull de la branche newfeature depuis . Une fois le téléchargement terminé, une commande 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

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.

Des personnes qui collaborent à l'aide d'un mur rempli d'outils

Le blog Bitbucket

Illustration DevOps

Parcours de formation DevOps

Démos Des démos avec des partenaires d'Atlassian

Fonctionnement de Bitbucket Cloud avec Atlassian Open DevOps

Inscrivez-vous à notre newsletter DevOps

Thank you for signing up