Comment vérifier si une branche Git a divergé de la branche distante

GitGitBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à vérifier si votre branche Git locale a divergé de sa contrepartie distante. Il s'agit d'une compétence fondamentale pour le développement collaboratif et pour rester à jour avec les modifications du projet.

Nous commencerons par récupérer les mises à jour depuis un dépôt distant simulé et utiliser git status pour déterminer si votre branche locale est en retard. Ensuite, vous explorerez comment utiliser git log pour comparer les commits entre votre branche locale et la branche distante. Enfin, vous vérifierez la divergence en utilisant git diff @{u} HEAD.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BranchManagementGroup -.-> git/log("Show Commits") git/CollaborationandSharingGroup -.-> git/fetch("Download Updates") subgraph Lab Skills git/status -.-> lab-560038{{"Comment vérifier si une branche Git a divergé de la branche distante"}} git/diff -.-> lab-560038{{"Comment vérifier si une branche Git a divergé de la branche distante"}} git/log -.-> lab-560038{{"Comment vérifier si une branche Git a divergé de la branche distante"}} git/fetch -.-> lab-560038{{"Comment vérifier si une branche Git a divergé de la branche distante"}} end

Récupérer et vérifier l'état de Git pour détecter une divergence

Dans cette étape, nous apprendrons à vérifier s'il y a des modifications dans le dépôt distant que nous n'avons pas localement. Cela est crucial lorsque vous collaborez avec d'autres personnes ou lorsque vous travaillez sur un projet mis à jour ailleurs.

Tout d'abord, simulons un dépôt distant avec quelques modifications. Dans un scénario réel, il s'agirait d'un dépôt hébergé sur une plateforme comme GitHub ou GitLab. Pour ce laboratoire (lab), nous utiliserons un répertoire local pour agir comme notre "dépôt distant".

Naviguez vers le répertoire de votre projet si vous n'y êtes pas déjà :

cd ~/project/my-time-machine

Maintenant, récupérons les dernières modifications du dépôt distant simulé. Nous utiliserons la commande git fetch. Cette commande télécharge les commits, les fichiers et les références (refs) d'un dépôt distant dans votre dépôt local. Elle ne les fusionne pas avec votre branche actuelle.

git fetch origin

Vous n'avez peut-être pas beaucoup de sortie si il n'y a pas de nouvelles modifications. Cependant, git fetch met à jour les informations sur les branches distantes dans votre dépôt local.

Ensuite, nous utiliserons git status pour voir si notre branche locale est en retard par rapport à la branche distante. La commande git status est votre fenêtre sur l'état actuel de votre dépôt. Elle vous informe sur les fichiers préparés (staged), non préparés (unstaged) et non suivis (untracked), et fournit également des informations sur la relation entre votre branche actuelle et sa branche amont (upstream).

Exécutez la commande git status :

git status

S'il y avait des modifications sur le dépôt distant que vous venez de récupérer, la sortie de git status indiquerait que votre branche locale est en retard par rapport à la branche distante. Cela pourrait ressembler à ceci :

On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

Ce message vous indique que votre branche locale master est en retard d'un commit par rapport à la branche origin/master (la version distante de la branche master). Il suggère également d'utiliser git pull pour mettre à jour votre branche locale, ce que nous verrons dans un laboratoire (lab) ultérieur.

Comprendre la sortie de git status après avoir récupéré les modifications est important car cela vous permet de savoir s'il y a de nouvelles modifications disponibles depuis le dépôt distant avant de décider de les intégrer à votre travail local. Cela permet d'éviter les conflits potentiels et de vous tenir informé de l'avancement du projet.

Utiliser git log pour comparer les commits

Dans l'étape précédente, nous avons utilisé git status pour voir si notre branche locale était en retard par rapport à la branche distante. Maintenant, utilisons git log pour voir les commits réels qui sont sur la branche distante mais pas sur notre branche locale.

La commande git log est incroyablement polyvalente. Elle vous permet de visualiser l'historique des commits de nombreuses manières différentes. Pour comparer notre branche locale (HEAD) avec la branche de suivi distante (origin/master), nous pouvons utiliser la syntaxe suivante :

git log HEAD..origin/master

Assurez-vous d'être dans le répertoire ~/project/my-time-machine :

cd ~/project/my-time-machine

Maintenant, exécutez la commande git log pour comparer les branches :

git log HEAD..origin/master

S'il y a des commits sur origin/master qui ne sont pas sur votre HEAD local (qui pointe actuellement vers votre branche locale master), cette commande listera ces commits. La sortie affichera les détails du commit, y compris le hachage du commit, l'auteur, la date et le message de commit, pour chaque commit qui existe dans origin/master mais pas dans votre branche actuelle.

Par exemple, si le dépôt distant avait un nouveau commit, la sortie pourrait ressembler à ceci :

commit abcdef1234567890abcdef1234567890abcdef (origin/master)
Author: Another User <[email protected]>
Date:   Tue Aug 8 10:00:00 2023 +0000

    Add a new feature

Cette sortie montre clairement le commit qui est présent sur le dépôt distant mais pas localement. La syntaxe HEAD..origin/master indique à Git d'afficher les commits qui sont accessibles depuis origin/master mais pas depuis HEAD.

Utiliser git log de cette manière est un outil puissant pour comprendre les différences entre les branches et voir exactement quelles modifications vous obtiendriez si vous mettiez à jour votre branche locale. Elle fournit plus de détails que git status sur les commits spécifiques qui causent la divergence.

N'oubliez pas d'appuyer sur q pour quitter la vue du journal si elle s'ouvre dans un visualiseur (pager).

Vérifier avec git diff @{u} HEAD

Dans les étapes précédentes, nous avons utilisé git status pour voir si notre branche locale était en retard par rapport à la branche distante et git log pour voir les commits différents. Maintenant, utilisons git diff pour voir les modifications réelles du code introduites par ces commits sur la branche distante par rapport à notre branche locale.

La commande git diff montre les différences entre deux points de l'historique de votre dépôt Git. Nous pouvons l'utiliser pour comparer notre branche locale actuelle (HEAD) avec sa branche amont (upstream). La branche amont est la branche sur le dépôt distant que votre branche locale suit. Dans notre cas, la branche amont pour master est origin/master. Git propose un raccourci pratique pour désigner la branche amont : @{u} ou @{upstream}.

Assurez-vous d'être dans le répertoire ~/project/my-time-machine :

cd ~/project/my-time-machine

Maintenant, exécutez la commande git diff pour voir les différences entre votre branche locale et sa branche amont :

git diff @{u} HEAD

Cette commande vous montrera les différences ligne par ligne entre les fichiers de votre commit actuel (HEAD) et les fichiers du dernier commit sur la branche amont (@{u}).

S'il y a des modifications sur le dépôt distant que vous n'avez pas encore récupérées, la sortie affichera ces différences. Par exemple, si une ligne a été ajoutée au fichier message.txt sur le dépôt distant, la sortie pourrait ressembler à ceci :

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+This is a new line from the remote.

Le signe + indique les lignes qui sont présentes dans la branche amont (@{u}) mais pas dans votre branche locale (HEAD).

Utiliser git diff @{u} HEAD est un moyen puissant de prévisualiser les modifications qui existent sur le dépôt distant avant de les fusionner dans votre branche locale. Cela vous permet de comprendre exactement les modifications qui ont été apportées, ce qui est très utile pour les revues de code ou simplement pour rester informé de l'évolution du projet.

Appuyez sur q pour quitter la vue des différences si elle s'ouvre dans un visualiseur (pager).

Résumé

Dans ce laboratoire (lab), nous avons appris à vérifier si une branche Git locale a divergé de sa contrepartie distante. Nous avons commencé par simuler un dépôt distant et utilisé git fetch pour récupérer les dernières modifications sans les fusionner. Ensuite, nous avons utilisé git status pour rapidement identifier si notre branche locale était en retard par rapport à la branche distante, ce qui est indiqué par des messages tels que "Your branch is behind 'origin/master' by X commit" (Votre branche est en retard de X commits par rapport à 'origin/master').

Après le contrôle initial avec git status, nous avons exploré des méthodes plus détaillées pour comparer les branches. Nous avons appris à utiliser git log avec diverses options pour visualiser l'historique des commits et identifier les différences entre les branches locales et distantes. Enfin, nous avons découvert l'utilité de git diff @{u} HEAD pour comparer précisément les modifications entre la branche amont (upstream) et le HEAD actuel, offrant une vue claire de la divergence.