Toute extraction d'un commit qui n'est pas le nom d'une de vos succursales vous donnera un HEAD détaché. Un SHA1 qui représente la pointe d'une branche donne toujours une TETE détachée. Seule une extraction d'un nom de branche locale évite ce mode.
Voir l' engagement avec une HEAD détachée
Lorsque HEAD est détaché, le travail est validé comme d'habitude, sauf qu'aucune branche nommée n'est mise à jour. (Vous pouvez considérer cela comme une branche anonyme.)
Par exemple, si vous extrayez une "branche distante" sans la suivre au préalable, vous pouvez vous retrouver avec une TETE détachée.
Voir git: changer de branche sans détacher la tête
Avec Git 2.23 (août 2019), vous n'avez plus besoin d'utiliser la commande déroutantegit checkout
.
git switch
peut également extraire une branche et obtenir un détachement HEAD, sauf:
- il a une
--detach
option explicite
Pour vérifier la validation HEAD~3
pour une inspection ou une expérience temporaire sans créer de nouvelle branche:
git switch --detach HEAD~3
HEAD is now at 9fc9555312 Merge branch 'cc/shared-index-permbits'
- il ne peut pas détacher par erreur une branche de suivi à distance
Voir:
C:\Users\vonc\arepo>git checkout origin/master
Note: switching to 'origin/master'.
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 without impacting any branches by switching back to a branch.
Contre. en utilisant la nouvelle git switch
commande:
C:\Users\vonc\arepo>git switch origin/master
fatal: a branch is expected, got remote branch 'origin/master'
Si vous vouliez créer une nouvelle branche locale suivant une branche distante:
git switch <branch>
Si <branch>
n'est pas trouvé mais qu'il existe une branche de suivi dans exactement une télécommande (appelez-la <remote>
) avec un nom correspondant, traitez comme équivalent à
git switch -c <branch> --track <remote>/<branch>
Plus d'erreur!
Plus de tête détachée indésirable!
branch-name@{n}
, la nième position précédente debranch-name
. Mais quoi qu'il en soit, à un moment donné, il devait y avoir ungit checkout <rev>
. Si cela ne vous dit rien, alors vous avez probablement fait ce que Will a mentionné - essayé de fairegit checkout <file>
et réussi à spécifier une révision par accident.