Comment vérifier si un dépôt Git est en état de HEAD détaché

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 à déterminer si un dépôt Git est dans un état "HEAD détaché" (detached HEAD). Nous explorerons le concept de HEAD en tant que pointeur vers le commit actuel et utiliserons la commande git status pour voir vers quel commit HEAD pointe.

En outre, vous utiliserez la commande git symbolic-ref HEAD pour vérifier plus directement la référence de HEAD. Enfin, vous testerez ces méthodes en observant la sortie dans les états "HEAD détaché" et "HEAD normal" pour consolider votre compréhension.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") subgraph Lab Skills git/status -.-> lab-560097{{"Comment vérifier si un dépôt Git est en état de HEAD détaché"}} git/branch -.-> lab-560097{{"Comment vérifier si un dépôt Git est en état de HEAD détaché"}} git/checkout -.-> lab-560097{{"Comment vérifier si un dépôt Git est en état de HEAD détaché"}} end

Utiliser git status pour vérifier HEAD

Dans cette étape, nous allons explorer un concept fondamental de Git : le HEAD. Imaginez le HEAD comme un pointeur vers le commit actuel sur lequel vous travaillez. C'est comme un signet dans l'historique de votre projet, vous indiquant où vous vous trouvez actuellement.

Nous pouvons voir vers quel commit HEAD pointe en utilisant la commande git status, que nous avons déjà utilisée. Exécutons - la à nouveau dans notre répertoire my - time - machine :

cd ~/project/my-time-machine
git status

Vous devriez voir une sortie similaire à celle - ci :

On branch master
nothing to commit, working tree clean

Dans cette sortie, On branch master nous indique que HEAD pointe actuellement vers le dernier commit de la branche master. Cela signifie que les fichiers dans votre répertoire de travail correspondent au dernier commit sur la branche master.

Comprendre le HEAD est crucial car de nombreuses commandes Git opèrent sur le commit vers lequel HEAD pointe. Lorsque vous effectuez un nouveau commit, HEAD se déplace automatiquement pour pointer vers ce nouveau commit.

Récapitulons brièvement pourquoi git status est si utile. Elle vous donne un instantané de l'état actuel de votre dépôt, vous montrant :

  • Sur quelle branche vous vous trouvez (On branch master)
  • Si vous avez des modifications qui n'ont pas encore été validées (nothing to commit)
  • Si votre répertoire de travail est propre (c'est - à - dire qu'il n'y a pas de modifications non validées)

Ces informations vous aident à vous repérer dans l'historique de votre projet et à comprendre ce que Git suit actuellement.

Exécuter git symbolic-ref HEAD pour vérification

Dans l'étape précédente, nous avons vu que git status indique vers quelle branche HEAD pointe. Il existe une autre commande qui nous permet d'obtenir une vue plus directe de ce vers quoi HEAD fait référence : git symbolic-ref HEAD.

Exécutons cette commande dans notre répertoire my-time-machine :

cd ~/project/my-time-machine
git symbolic-ref HEAD

Vous devriez voir une sortie comme celle-ci :

refs/heads/master

Cette sortie confirme que HEAD est une référence symbolique (un pointeur) vers refs/heads/master. Dans Git, refs/heads/ est l'emplacement standard pour les références de branche. Ainsi, refs/heads/master est la référence pour la branche master.

Cette commande est particulièrement utile pour la création de scripts ou lorsque vous avez besoin de déterminer de manière programmée sur quelle branche HEAD se trouve actuellement. Alors que git status fournit un résumé convivial pour l'utilisateur, git symbolic-ref HEAD vous donne la référence brute.

Comprendre que HEAD est généralement une référence symbolique vers une branche est un concept clé dans Git. Cela explique comment Git sait sur quelle branche vous travaillez et comment des commandes comme git commit savent où ajouter de nouveaux commits.

Gardez à l'esprit que HEAD peut parfois pointer directement vers un commit au lieu d'une branche. Cela s'appelle un état "HEAD détaché" (detached HEAD), que nous explorerons dans l'étape suivante. Pour l'instant, il est important de savoir que git symbolic-ref HEAD vous montre la référence symbolique lorsque HEAD est attaché à une branche.

Tester avec un HEAD détaché et un HEAD normal

Dans les étapes précédentes, nous avons appris que HEAD pointe généralement vers une branche, comme master. C'est l'état "normal". Cependant, HEAD peut également pointer directement vers un commit spécifique. Cela s'appelle un état "HEAD détaché" (detached HEAD).

Voyons à quoi ressemble un HEAD détaché. Tout d'abord, nous avons besoin de l'identifiant du premier commit. Nous pouvons l'obtenir en utilisant git log --oneline :

cd ~/project/my-time-machine
git log --oneline

Vous devriez voir une sortie similaire à celle-ci (votre identifiant de commit sera différent) :

a1b2c3d (HEAD -> master) Send a message to the future

Les sept premiers caractères (a1b2c3d dans cet exemple) sont l'identifiant court du commit. Copiez cet identifiant.

Maintenant, déplaçons HEAD pour qu'il pointe directement vers ce commit en utilisant git checkout :

git checkout <your_commit_id>

Remplacez <your_commit_id> par l'identifiant court de commit que vous avez copié depuis git log --oneline. Par exemple :

git checkout a1b2c3d

Vous verrez une sortie indiquant que vous êtes en état de HEAD détaché :

Note: switching to 'a1b2c3d'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or, if you want to make this branch stay, use:

  git branch <new-branch-name> <your_commit_id>

Switched to commit a1b2c3d

Maintenant, vérifions l'état à nouveau :

git status

La sortie montrera clairement que vous êtes en état de HEAD détaché :

HEAD is now at a1b2c3d Send a message to the future
nothing to commit, working tree clean

Et si nous utilisons git symbolic-ref HEAD, cela affichera une erreur car HEAD n'est pas une référence symbolique vers une branche :

git symbolic-ref HEAD

Cette commande produira probablement une erreur ou aucune sortie, indiquant que HEAD n'est pas une référence symbolique.

Pour revenir à l'état normal où HEAD pointe vers la branche master, nous pouvons basculer vers la branche master :

git checkout master

Vous devriez voir une sortie comme celle-ci :

Switched to branch 'master'

Maintenant, git status vous montrera que vous êtes de retour sur la branche master :

git status

Sortie :

On branch master
nothing to commit, working tree clean

Et git symbolic-ref HEAD affichera à nouveau la référence symbolique :

git symbolic-ref HEAD

Sortie :

refs/heads/master

Comprendre la différence entre un HEAD attaché (pointant vers une branche) et un HEAD détaché (pointant directement vers un commit) est important pour naviguer dans l'historique de votre projet et effectuer des opérations avancées avec Git.

Résumé

Dans ce laboratoire (lab), nous avons appris à vérifier si un dépôt Git est en état de HEAD détaché. Nous avons commencé par utiliser la commande git status pour voir vers quoi HEAD pointe actuellement, en observant qu'elle indique la branche actuelle lorsqu'on n'est pas en état de HEAD détaché.

Nous avons ensuite utilisé la commande git symbolic-ref HEAD pour une vérification plus directe, qui affiche le chemin complet de la référence (par exemple, refs/heads/master) lorsque HEAD est attaché à une branche. Enfin, nous avons testé ces commandes à la fois en état de HEAD détaché et en état normal de HEAD pour comprendre les sorties différentes et confirmer comment identifier un HEAD détaché.