Comment vérifier si une branche Git est en avance par rapport à 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), nous allons apprendre à vérifier si votre branche Git locale est en avance par rapport à sa branche distante correspondante. Cette compétence est essentielle pour comprendre l'état de votre dépôt (repository) avant de pousser (push) des modifications. Nous allons explorer deux méthodes principales : utiliser git status pour voir l'état "en avance" et utiliser git log avec la syntaxe @{u}..HEAD pour afficher les commits spécifiques qui sont en avance.

Grâce à des exercices pratiques, nous allons simuler la création de commits locaux, puis utiliser ces commandes pour observer comment Git indique que notre branche locale a divergé de la branche distante. Enfin, nous allons tester ces méthodes avec des branches synchronisées pour voir le résultat attendu lorsqu'aucun commit est en avance.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/DataManagementGroup -.-> git/reset("Undo Changes") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560041{{"Comment vérifier si une branche Git est en avance par rapport à la branche distante"}} git/status -.-> lab-560041{{"Comment vérifier si une branche Git est en avance par rapport à la branche distante"}} git/commit -.-> lab-560041{{"Comment vérifier si une branche Git est en avance par rapport à la branche distante"}} git/reset -.-> lab-560041{{"Comment vérifier si une branche Git est en avance par rapport à la branche distante"}} git/log -.-> lab-560041{{"Comment vérifier si une branche Git est en avance par rapport à la branche distante"}} end

Vérifier le statut Git pour l'état "en avance"

Dans cette étape, nous allons apprendre à vérifier le statut de notre dépôt Git, en particulier comment Git nous indique si notre branche locale est "en avance" par rapport à une branche distante. C'est un scénario courant lorsque vous avez effectué des commits localement mais que vous n'avez pas encore poussé (push) ces modifications vers un dépôt distant.

Tout d'abord, assurons-nous que nous sommes dans le répertoire de notre projet. Ouvrez votre terminal et accédez au répertoire my-time-machine :

cd ~/project/my-time-machine

Maintenant, créons un nouveau fichier et ajoutons-y du contenu. Nous allons simuler une modification que nous allons finalement commiter.

echo "Another message for the future" >> message.txt

Cette commande ajoute le texte "Another message for the future" à notre fichier message.txt existant.

Ensuite, préparons cette modification pour le commit en utilisant git add :

git add message.txt

Maintenant, créons un nouveau commit avec un message décrivant la modification :

git commit -m "Add another message"

Vous devriez voir un résultat similaire à ceci, indiquant qu'un nouveau commit a été créé :

[master 1a2b3c4] Add another message
 1 file changed, 1 insertion(+)

Parfait ! Nous avons maintenant effectué un nouveau commit sur notre branche locale master. Cependant, ce commit n'existe que localement. Si nous avions un dépôt distant (comme sur GitHub ou GitLab), ce commit ne serait pas encore présent.

Vérifions à nouveau le statut de notre dépôt en utilisant git status :

git status

Cette fois, la sortie sera légèrement différente. Vous devriez voir quelque chose comme ceci :

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

Remarquez la ligne Your branch is ahead of 'origin/master' by 1 commit.. C'est Git qui nous indique que notre branche locale master a un commit qui n'est pas présent sur la branche origin/master (qui représente la branche master sur un dépôt distant hypothétique nommé origin).

Cet état "en avance" est un indicateur clé que vous avez des modifications locales qui doivent être poussées vers le dépôt distant pour être partagées avec d'autres personnes ou sauvegardées à distance. Comprendre cet état est essentiel pour collaborer avec d'autres personnes et maintenir la synchronisation entre vos dépôts locaux et distants.

Utiliser git log @{u}..HEAD pour voir les commits en avance

Dans l'étape précédente, nous avons vu que git status nous indiquait que notre branche locale était "en avance" par rapport à la branche de suivi distante. Mais comment savoir quels commits sont en avance ? Git propose un moyen puissant de comparer des branches en utilisant git log.

La syntaxe @{u}..HEAD est une notation abrégée dans Git. @{u} fait référence à la branche en amont (la branche de suivi distante que votre branche actuelle est configurée pour suivre, comme origin/master), et HEAD fait référence au dernier commit de votre branche locale actuelle. Ainsi, @{u}..HEAD signifie "montre-moi les commits qui sont sur ma branche actuelle (HEAD) mais pas sur la branche en amont (@{u})".

Essayons cette commande dans notre terminal. Assurez-vous que vous êtes toujours dans le répertoire ~/project/my-time-machine :

cd ~/project/my-time-machine
git log @{u}..HEAD

Vous devriez voir l'entrée du journal (log) pour le commit que nous avons effectué dans l'étape précédente :

commit 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0 (HEAD -> master, origin/master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Add another message

(Note : Le hachage du commit et la date seront différents dans votre sortie, mais le message du commit devrait être le même.)

Cette commande est incroyablement utile pour voir exactement quelles modifications vous êtes sur le point de pousser (push) vers un dépôt distant. Elle vous aide à revoir votre travail et à vous assurer que vous ne poussez que les commits prévus.

La syntaxe @{u}..HEAD est un exemple spécifique de la notation de plage de Git pour git log. Vous pouvez utiliser une syntaxe similaire pour comparer n'importe deux commits ou branches. Par exemple, branch1..branch2 montre les commits sur branch2 qui ne sont pas sur branch1.

Comprendre comment utiliser git log avec la notation de plage vous donne un contrôle précis sur la visualisation de l'historique de votre projet et la comparaison de différents états de votre dépôt.

Appuyez sur q pour quitter la vue du journal et revenir à la ligne de commande.

Tester avec des branches synchronisées

Dans les étapes précédentes, nous avons vu ce qui se passe lorsque notre branche locale est en avance par rapport à la branche de suivi distante. Maintenant, voyons ce que git status et git log @{u}..HEAD montrent lorsque notre branche locale est synchronisée avec la branche de suivi distante.

Étant donné que nous n'avons pas de véritable dépôt distant dans cet environnement de laboratoire, nous pouvons simuler la synchronisation en supprimant le commit que nous venons de faire. Dans un scénario réel, être synchronisé signifierait que vous avez poussé vos commits locaux vers le dépôt distant.

Nous pouvons utiliser git reset pour déplacer le pointeur de notre branche locale vers le commit précédent. Faites attention avec git reset dans les projets réels, car il peut supprimer des modifications ! Pour ce laboratoire, c'est sans danger car nous simulons simplement un état.

Assurez-vous que vous êtes dans le répertoire ~/project/my-time-machine :

cd ~/project/my-time-machine

Maintenant, réinitialisons notre branche au commit précédant le dernier. Nous pouvons utiliser HEAD~1 pour faire référence au commit avant le HEAD actuel.

git reset --hard HEAD~1

Vous devriez voir un résultat similaire à ceci, indiquant que le HEAD a été déplacé en arrière et que le répertoire de travail a été mis à jour :

HEAD is now at a1b2c3d Send a message to the future

(Note : Le hachage du commit correspondra au hachage de votre premier commit.)

Maintenant que nous avons réinitialisé notre branche locale à l'état du premier commit, vérifions à nouveau le statut :

git status

Cette fois, la sortie devrait indiquer que votre branche est à jour avec la branche de suivi distante :

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

Le message Your branch is up to date with 'origin/master'. nous indique que notre branche locale master est synchronisée avec la branche de suivi distante.

Enfin, utilisons à nouveau git log @{u}..HEAD pour voir s'il y a des commits en avance :

git log @{u}..HEAD

Cette commande ne devrait produire aucune sortie, car il n'y a pas de commits sur notre branche locale (HEAD) qui ne soient pas également sur la branche en amont (@{u}).

Cela confirme que notre branche locale est maintenant synchronisée avec la branche de suivi distante. Comprendre la sortie de git status et utiliser git log @{u}..HEAD sont des compétences essentielles pour gérer votre flux de travail Git et collaborer efficacement.

Résumé

Dans ce laboratoire, nous avons appris à vérifier si une branche Git locale est en avance par rapport à sa branche distante correspondante. Nous avons commencé par effectuer un commit local, puis utilisé git status pour observer le message d'état "en avance", qui indique que la branche locale contient des commits qui ne sont pas encore présents sur le dépôt distant.

Nous avons également exploré l'utilisation de git log @{u}..HEAD pour lister spécifiquement les commits qui sont en avance par rapport à la branche de suivi distante, offrant ainsi une vue plus détaillée des différences. Enfin, nous avons testé le comportement avec des branches synchronisées pour confirmer que git status indique que les branches sont à jour lorsqu'il n'y a pas de commits locaux en avance par rapport au dépôt distant.