Je me suis retrouvé avec une tête détachée aujourd'hui, le même problème que celui décrit dans: git push dit que tout est à jour même si j'ai des changements locaux
Pour autant que je sache, je n'ai rien fait hors de l'ordinaire, juste des commits et des push de mon repo local.
Alors, comment ai-je fini avec un detached HEAD
?
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.git status
:all conflicts fixed: run "git rebase --continue"
git checkout remotes/origin/my-branch
au lieu degit checkout my-branch
ougit checkout origin/my-branch
.Réponses:
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
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éroutante
git checkout
.git switch
peut également extraire une branche et obtenir un détachement HEAD, sauf:--detach
option expliciteVoir:
Contre. en utilisant la nouvelle
git switch
commande:Si vous vouliez créer une nouvelle branche locale suivant une branche distante:
Plus d'erreur!
Plus de tête détachée indésirable!
la source
git commit files creates a new commit containing the contents of the latest commit, plus a snapshot of files taken from the working directory. Additionally, files are copied to the stage.
Qu'est-ce que cela signifie par «les fichiers sont copiés sur la scène»? Je pensais que les fichiers étaient validés, ce qui signifie que la scène est effacée?master
ested489
sur le diagramme ci-dessus,git checkout ed489
vous donnera une tête détachée, tandis quegit checkout master
ce ne sera pas le cas."You can think of this as an anonymous branch"
:) J'aime l'analogieJe l'ai reproduit tout à l'heure par accident:
répertorie les branches distantes
Je veux en commander un localement, donc je coupe la pâte:
Presto! État HEAD détaché
Solution n ° 1:
N'incluez pas
origin/
à l'avant de mes spécifications de succursale lors de la vérification:Solution n ° 2:
Ajouter un
-b
paramètre qui crée une branche locale à distancegit checkout -b origin/Feature/f1234
ougit checkout -b Feature/f1234
il retombera automatiquement à l'originela source
git checkout -b Feature/f1234
<=>git branch Feature/f1234
etgit checkout Feature/f1234
.origin/branchname
, il chercheorigin/origin/branchname
à dire que le premier est le nom distant que vous utilisez-b
, sinon vous créez uneanonymous
branche qui est détachée. De même, pour vérifier à partir d'une autre télécommande, vous devez mentionner un-b
paramètre, sinon git n'a aucun moyen de le savoir à partir d'une nouvelle télécommande, il chercheraorigin/remote/branchname
.essayer
cela vous donne un historique de la façon dont vos pointeurs HEAD et branch ont été déplacés dans le passé.
par exemple :
88ea06b HEAD @ {0}: paiement: passage du DÉVELOPPEMENT aux télécommandes / origine / SomeNiceFeature e47bf80 HEAD @ {1}: tirer l'origine DÉVELOPPEMENT: Avance rapide
le haut de cette liste est une raison pour laquelle on pourrait rencontrer un état DETACHED HEAD ... en vérifiant une branche de suivi à distance.
la source
Cela peut facilement se produire si vous essayez d'annuler les modifications que vous avez apportées en retirant à nouveau les fichiers et en n'obtenant pas tout à fait la bonne syntaxe.
Vous pouvez regarder la sortie de
git log
- vous pouvez coller la queue du journal ici depuis le dernier commit réussi, et nous pourrions tous voir ce que vous avez fait. Ou vous pouvez le coller et le demander joliment#git
sur l'IRC de freenode.la source
Cela peut arriver si vous avez une balise portant le même nom qu'une branche.
Exemple: si "release / 0.1" est le nom de la balise, alors
produit une tête détachée à "libération / 0,1". Si vous vous attendez à ce que release / 0.1 soit un nom de branche, vous vous trompez.
la source
Detached HEAD
signifie que ce qui est actuellement extrait n'est pas une branche locale.Quelques scénarios qui aboutiront à un
Detached HEAD
état:Si vous réglez une succursale distante , par exemple
origin/master
. Il s'agit d'une branche en lecture seule. Ainsi, lors de la création d'un commit à partir deorigin/master
celui-ci, il flottera librement , c'est -à- dire qu'il ne sera connecté à aucune branche.Si vous extrayez une balise ou un commit spécifique . Lorsque vous effectuez un nouveau commit à partir d'ici, il sera à nouveau flottant , c'est -à- dire qu'il n'est connecté à aucune branche. Notez que lorsqu'une branche est extraite, les nouvelles validations sont toujours automatiquement placées à l'extrémité.
Lorsque vous souhaitez revenir en arrière et extraire une validation ou une balise spécifique pour commencer à travailler à partir de là, vous pouvez créer une nouvelle branche provenant de cette validation et y basculer
git checkout -b new_branch_name
. Cela empêchera l'Detached HEAD
état car vous avez maintenant une branche extraite et non un commit.la source
Un moyen accidentel simple consiste à faire une
git checkout head
comme une faute de frappeHEAD
.Essaye ça:
qui donne
la source
checkout -b
qui ressemble à une caisse mais en fait des branches) mais une autre liste est juste la bienvenue.L'autre façon d'entrer dans un état de tête détachée git est d'essayer de valider sur une branche distante. Quelque chose comme:
Notez que si vous faites cela, toute autre tentative de vérification de l'origine / foo vous ramènera dans un état de tête détaché!
La solution consiste à créer votre propre branche foo locale qui suit l'origine / foo, puis éventuellement à pousser.
Cela n'a probablement rien à voir avec votre problème d'origine, mais cette page est en haut des hits google pour "git détaché tête" et ce scénario est gravement sous-documenté.
la source
Lorsque vous passez à un commit
git checkout <commit-hash>
ou à une branche distante, votre HEAD se détache et essaie de créer un nouveau commit dessus.Les validations qui ne sont accessibles par aucune branche ou balise seront récupérées et supprimées du référentiel après 30 jours.
Une autre façon de résoudre ce problème consiste à créer une nouvelle branche pour la validation nouvellement créée et à la retirer.
git checkout -b <branch-name> <commit-hash>
Cet article explique comment accéder à l' état HEAD détaché .
la source