Comment vérifier si une branche Git a des commits non envoyés

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 contient des commits qui n'ont pas encore été envoyés (pushed) vers un dépôt distant. Nous explorerons différentes méthodes pour identifier ces commits non envoyés, en commençant par la commande git status pour voir si votre branche est en avance par rapport à la branche distante.

Vous apprendrez ensuite à utiliser la commande git log avec des arguments spécifiques pour lister les commits qui existent localement mais pas sur la branche de suivi distante. Enfin, nous discuterons de la manière de vérifier ces informations en comparant votre branche locale avec le dépôt distant. À la fin de ce laboratoire, vous disposerez des compétences nécessaires pour déterminer facilement si vos modifications locales doivent être envoyées.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/log("Show Commits") git/CollaborationandSharingGroup -.-> git/push("Update Remote") subgraph Lab Skills git/add -.-> lab-560040{{"Comment vérifier si une branche Git a des commits non envoyés"}} git/status -.-> lab-560040{{"Comment vérifier si une branche Git a des commits non envoyés"}} git/commit -.-> lab-560040{{"Comment vérifier si une branche Git a des commits non envoyés"}} git/log -.-> lab-560040{{"Comment vérifier si une branche Git a des commits non envoyés"}} git/push -.-> lab-560040{{"Comment vérifier si une branche Git a des commits non envoyés"}} end

Utiliser git status pour vérifier les commits en avance

Dans cette étape, nous apprendrons à utiliser la commande git status pour voir si notre branche locale contient des commits qui sont en avance par rapport à la branche distante. C'est un scénario courant lorsque vous avez effectué des modifications localement et que vous n'avez pas encore envoyé (pushed) 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 appellerons ce fichier future_plans.txt :

echo "Plan for world domination." > future_plans.txt

Ensuite, nous devons préparer (stage) ce nouveau fichier pour un commit :

git add future_plans.txt

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

git commit -m "Add future plans"

Vous devriez voir une sortie similaire à celle-ci, indiquant qu'un nouveau commit a été créé :

[master abcdefg] Add future plans
 1 file changed, 1 insertion(+)
 create mode 100644 future_plans.txt

Nous avons maintenant créé un nouveau commit sur notre branche locale master. Cependant, ce commit n'existe que localement et n'a pas été envoyé à un dépôt distant.

Utilisons git status pour voir l'état actuel de notre dépôt :

git status

La sortie devrait maintenant indiquer que votre branche locale est en avance par rapport à la branche distante (si vous en aviez configurée une, ce que nous n'avons pas fait dans cet exemple de base, mais Git vous donne quand même un indice) :

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

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   future_plans.txt

nothing to commit, working tree clean

La ligne importante ici est Your branch is ahead of 'origin/master' by 1 commit.. Cela nous indique que notre branche locale master a un commit qui n'est pas présent sur la branche origin/master (qui est le nom par défaut de la branche distante attendue par Git).

Ceci est une information très utile. Elle vous indique que vous avez des modifications locales qui n'ont pas encore été partagées avec les autres. Dans un scénario réel avec un dépôt distant, cela signifierait que vous devez utiliser git push pour envoyer vos modifications.

Exécuter git log --oneline @{u}..HEAD

Dans l'étape précédente, nous avons vu comment git status peut nous indiquer si notre branche locale est en avance par rapport à la branche distante. Maintenant, utilisons la commande git log avec une syntaxe spéciale pour voir exactement quels commits sont en avance.

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

La commande que nous allons utiliser est git log --oneline @{u}..HEAD. Décortiquons cette commande :

  • git log : C'est la commande pour afficher l'historique des commits.
  • --oneline : Cette option affiche chaque commit sur une seule ligne, rendant la sortie concise et facile à lire.
  • @{u} : C'est une syntaxe spéciale qui fait référence à la branche en amont (upstream branch). Dans notre cas, puisque nous n'avons pas explicitement défini de branche en amont, Git utilise origin/master par défaut (en supposant que origin est le nom du dépôt distant et master est la branche).
  • ..HEAD : C'est une notation de plage. HEAD fait référence au dernier commit de la branche actuelle (notre branche locale master). La plage @{u}..HEAD signifie "montre-moi les commits qui sont accessibles depuis HEAD mais pas depuis @{u}". En termes plus simples, elle montre les commits qui sont sur notre branche locale mais pas sur la branche distante en amont.

Maintenant, exécutons la commande :

git log --oneline @{u}..HEAD

Vous devriez voir une sortie similaire à celle-ci :

abcdefg (HEAD -> master) Add future plans

Cette sortie montre le commit que nous avons créé dans l'étape précédente (Add future plans). L'identifiant unique (abcdefg) sera différent dans votre terminal, mais le message de commit devrait correspondre.

Cette commande est incroyablement utile pour voir exactement quels commits vous êtes sur le point d'envoyer (push) vers un dépôt distant. Elle vous donne une liste claire des modifications que vous avez apportées localement et qui n'ont pas encore été partagées.

En comparant cette sortie avec celle de git status de l'étape précédente, vous pouvez voir que git status vous indique combien de commits vous êtes en avance, tandis que git log @{u}..HEAD vous indique quels commits spécifiques vous êtes en avance. Les deux commandes fournissent des informations précieuses sur l'état de votre dépôt local par rapport à son équivalent distant.

Vérification par comparaison avec le dépôt distant

Dans un scénario réel, vous auriez généralement un dépôt distant (par exemple sur GitHub, GitLab ou Bitbucket) auquel votre dépôt local est connecté. Dans cet environnement de laboratoire, nous n'avons pas de dépôt distant actif vers lequel envoyer (push) les modifications. Cependant, nous pouvons simuler le concept de comparaison de notre branche locale avec une branche distante en utilisant les commandes que nous avons apprises.

Nous avons déjà utilisé git status et git log --oneline @{u}..HEAD pour voir les commits qui sont sur notre branche locale mais pas sur la branche en amont simulée (origin/master).

Revoyons à nouveau la sortie de git status :

git status

Vous devriez toujours voir la ligne indiquant que votre branche est en avance :

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

... (rest of the output)

Et la sortie de git log --oneline @{u}..HEAD :

git log --oneline @{u}..HEAD

Cela devrait afficher le seul commit que nous avons effectué :

abcdefg (HEAD -> master) Add future plans

Ces deux commandes fonctionnent ensemble pour vous donner une image claire de la différence entre votre branche locale et sa branche en amont configurée. git status fournit un résumé, tandis que git log @{u}..HEAD fournit les détails des commits spécifiques.

Dans un projet réel, après avoir vu cette sortie, vous exécuteriez généralement git push pour envoyer vos commits locaux au dépôt distant, les rendant disponibles pour les autres et mettant à jour la branche distante.

Comme nous n'avons pas de dépôt distant vers lequel envoyer les modifications dans ce laboratoire, nous avons atteint avec succès l'objectif de comprendre comment identifier les commits qui sont en avance par rapport à la branche distante en utilisant git status et git log.

Cette compétence est fondamentale pour collaborer avec d'autres personnes et maintenir la synchronisation entre vos dépôts locaux et distants. En vérifiant régulièrement l'état et l'historique des commits, vous pouvez être au courant de vos modifications en attente et vous assurer de les envoyer lorsque vous êtes prêt.

Résumé

Dans ce laboratoire, nous avons appris à vérifier si une branche Git a des commits non envoyés (unpushed commits). Nous avons commencé par utiliser la commande git status après avoir effectué un commit local. La sortie de git status indique clairement si la branche locale est "en avance" par rapport à sa contrepartie distante et de combien de commits, offrant ainsi un moyen direct de voir s'il y a des modifications non envoyées.

Nous avons ensuite exploré l'utilisation de git log --oneline @{u}..HEAD pour obtenir une vue plus détaillée des commits spécifiques qui sont sur la branche locale mais pas sur la branche de suivi distante (remote tracking branch). Cette commande liste les hachages (hashes) et les messages des commits non envoyés, offrant un moyen précis d'identifier quelles modifications sont en attente. Enfin, nous avons discuté du concept de vérification en comparant les branches locales et distantes, renforçant ainsi la compréhension de la manière de confirmer la présence de commits non envoyés.