Comment vérifier si un dépôt Git a des commits non poussé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, vous apprendrez à vérifier si votre dépôt Git local contient des commits qui n'ont pas encore été poussés vers un dépôt distant. Nous explorerons différentes méthodes pour identifier ces commits "non poussés", en commençant par la commande fondamentale git status pour voir si votre branche locale est en avance par rapport à sa contrepartie distante.

Vous apprendrez ensuite à utiliser git log @{u}..HEAD pour lister spécifiquement les commits qui sont présents localement mais pas sur la branche amont. Enfin, nous aborderons brièvement comment vérifier l'état de toutes les branches pour avoir une vision globale de l'état de votre dépôt. À la fin de ce laboratoire, vous disposerez des commandes essentielles pour gérer et suivre efficacement vos modifications locales dans Git avant de les pousser vers le dépôt distant.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) 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/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560092{{"Comment vérifier si un dépôt Git a des commits non poussés"}} git/status -.-> lab-560092{{"Comment vérifier si un dépôt Git a des commits non poussés"}} git/commit -.-> lab-560092{{"Comment vérifier si un dépôt Git a des commits non poussés"}} git/log -.-> lab-560092{{"Comment vérifier si un dépôt Git a des commits non poussés"}} end

Vérifier l'état de Git pour les commits en avance

Dans cette étape, nous apprendrons à vérifier si votre branche locale est "en avance" par rapport à la branche distante en utilisant git status. C'est un scénario courant lorsque vous avez effectué des commits localement mais que vous ne les avez pas encore poussés 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 "This is a new line for the future." >> message.txt

Cette commande ajoute le texte "This is a new line for the future." au fichier message.txt que nous avons créé précédemment.

Ensuite, préparons cette modification 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 to the future"

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

[master a1b2c3d] Add another message to the future
 1 file changed, 1 insertion(+)

Maintenant que nous avons un nouveau commit localement, vérifions à nouveau l'état de notre dépôt en utilisant git status :

git status

Cette fois, la sortie sera 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

La ligne "Your branch is ahead of 'origin/master' by 1 commit." nous indique que notre branche locale master a un commit qui n'est pas présent dans la branche origin/master (qui représente la version distante de notre branche). C'est une situation très courante lorsque vous travaillez sur un projet et effectuez des modifications localement avant de les partager avec d'autres.

Comprendre git status est crucial car il vous donne une image claire de l'état actuel de votre dépôt. Il vous indique quels fichiers ont été modifiés, quelles modifications sont préparées et si votre branche locale est synchronisée avec la branche distante. Cela vous aide à suivre votre travail et à vous préparer à pousser vos modifications vers un dépôt distant.

Utiliser git log @{u}..HEAD

Dans l'étape précédente, nous avons vu que git status nous indique que notre branche locale est en avance par rapport à la branche distante. Mais comment pouvons-nous savoir quels commits sont en avance ? C'est là que la commande git log @{u}..HEAD s'avère utile.

La syntaxe @\{u\} (ou @{upstream}) fait référence à la branche amont que votre branche actuelle suit. Dans notre cas, puisque nous n'avons pas explicitement défini une branche amont, Git utilise par défaut origin/master (en supposant que origin est le nom du dépôt distant et master est le nom de la branche). HEAD fait référence au dernier commit de votre branche locale actuelle.

Donc, @{u}..HEAD signifie "montre-moi les commits qui sont sur ma branche actuelle (HEAD) mais pas sur la branche amont (@{u})".

Essayons-le dans notre répertoire my-time-machine :

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

Vous devriez voir une sortie similaire à celle-ci :

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

    Add another message to the future

Cette sortie montre le commit que nous venons de créer dans l'étape précédente. Cela confirme que ce commit spécifique est celui qui est "en avance" par rapport à la branche distante.

Utiliser git log @{u}..HEAD est un moyen puissant de voir exactement quelles modifications vous êtes sur le point de pousser vers un dépôt distant. Cela vous aide à revoir votre travail et à vous assurer que vous ne poussez que les commits souhaités.

N'oubliez pas que vous pouvez appuyer sur q pour quitter la vue du journal.

Vérifier avec toutes les branches

Dans les étapes précédentes, nous avons utilisé git status pour constater que notre branche locale est en avance et git log @{u}..HEAD pour voir les commits spécifiques qui sont en avance. Maintenant, utilisons git log --all --decorate --oneline --graph pour visualiser l'historique des commits de toutes les branches, ce qui peut nous aider à comprendre la relation entre nos branches locales et distantes.

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

cd ~/project/my-time-machine

Maintenant, exécutez la commande suivante :

git log --all --decorate --oneline --graph

Décortiquons les options :

  • --all : Affiche l'historique de toutes les branches.
  • --decorate : Affiche les noms des branches et des tags à côté des commits vers lesquels ils pointent.
  • --oneline : Affiche chaque commit sur une seule ligne.
  • --graph : Trace une représentation graphique basée sur du texte de l'historique des commits sur le côté gauche de la sortie.

Vous devriez voir une sortie similaire à celle-ci :

* a1b2c3d (HEAD -> master) Add another message to the future
* e4f5g6h (origin/master) Send a message to the future

Dans cette sortie :

  • La première ligne montre notre dernier commit (a1b2c3d) avec le message "Add another message to the future". (HEAD -> master) indique que notre HEAD actuel (l'endroit où nous travaillons actuellement) et la branche locale master pointent vers ce commit.
  • La ligne en dessous montre le commit précédent (e4f5g6h) avec le message "Send a message to the future". (origin/master) indique que la branche origin/master (la branche de suivi distante) pointe vers ce commit.

Le graphique à gauche (les * et les lignes) montre visuellement que notre branche locale master a avancé d'un commit par rapport à la branche origin/master. Cela confirme ce que git status nous avait indiqué précédemment.

Cette commande est incroyablement utile pour visualiser l'historique de votre dépôt, surtout lorsque vous avez plusieurs branches. Elle vous aide à comprendre comment les branches divergent et fusionnent, et où se situent vos branches locales par rapport aux branches distantes.

Appuyez sur q pour quitter la vue du journal.

Résumé

Dans ce laboratoire, nous avons appris à vérifier si un dépôt Git contient des commits non poussés. Nous avons commencé par utiliser git status pour déterminer si notre branche locale est "en avance" par rapport à la branche distante. Cela a impliqué de naviguer jusqu'au répertoire du projet, de créer et d'ajouter un nouveau fichier à l'index, puis de valider les modifications. Après avoir validé les modifications, l'exécution de git status a clairement montré que notre branche locale était en avance d'un commit par rapport à la branche distante, indiquant la présence de modifications non poussées.

Le laboratoire a démontré l'application pratique de git status pour identifier les commits non poussés, soulignant son importance pour comprendre l'état de synchronisation entre les dépôts locaux et distants.