HEAD détaché
Comprenez l'état de HEAD détaché dans Git — ce que cela signifie, pourquoi cela arrive, comment conserver le travail effectué dans cet état et comment revenir à une branche.
Définition
Un HEAD détaché survient lorsque HEAD pointe directement vers un commit plutôt que vers une branche. Normalement, HEAD référence un nom de branche (comme main), et cette branche pointe vers le dernier commit — de sorte que committer fait avancer la branche avec vous. Dans un état de HEAD détaché, cette chaîne est rompue : HEAD est positionné sur un commit spécifique sans qu'aucune branche ne transporte vos nouveaux commits.
Comment HEAD fonctionne normalement
Dans l'état « attaché » habituel, les références forment une chaîne : HEAD → branche → commit. Lorsque vous effectuez un nouveau commit, Git fait avancer le pointeur de branche vers le nouveau commit, et comme HEAD pointe vers la branche, il suit automatiquement. Votre historique reste ancré à une branche nommée.
Ce qui détache HEAD
HEAD se détache chaque fois que vous extrayez quelque chose qui n'est pas une branche — le plus souvent un commit spécifique, une étiquette ou une référence de suivi distante :
git checkout a1b2c3d # un hachage de commit
git checkout v1.0.0 # une étiquette
git switch --detach main # détacher explicitementGit vous avertit lorsque cela se produit et vous indique que vous êtes dans un état de « HEAD détaché ».
Pourquoi c'est important
Regarder autour de soi dans un HEAD détaché est parfaitement sûr — c'est idéal pour inspecter ou compiler un ancien commit. Le danger apparaît lorsque vous committez là. Comme aucune branche ne suit votre travail, ces nouveaux commits ne sont accessibles que via HEAD. Au moment où vous basculez vers une autre branche, ils deviennent « flottants » : toujours dans le dépôt pour un moment, mais sans rien qui les pointe, et finalement collectés par le ramasse-miettes.
Conserver le travail effectué dans un HEAD détaché
Si vous avez effectué des commits dans un HEAD détaché et souhaitez les conserver, créez une branche avant de vous déplacer. Cela ancre les commits à un nom :
git switch -c my-rescued-workVos commits détachés vivent maintenant sur la nouvelle branche, en sécurité et accessibles.
Revenir à la normale
Pour quitter un HEAD détaché sans conserver de nouveaux commits, basculez simplement vers une branche :
git switch mainSi vous avez commité dans l'état détaché, oublié de créer une branche et vous êtes déjà déplacé, ne paniquez pas — git reflog enregistre les positions passées de HEAD. Trouvez le hachage du commit perdu là-bas et récupérez-le :
git reflog
git switch -c recovered <lost-commit-hash>