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.