Lorsque vous extrayez un nom engager directement (en utilisant le hachage SHA-1 de l'objet commit) au lieu de vérifier un nom de branche, vous vous retrouvez avec un « détaché TÊTE". HEAD est le "ref" qui garde la trace de ce qui est actuellement extrait. Il se détache lorsque vous relisez directement un commit au lieu d'une branche (il n'est attaché à aucune branche). Aucune branche n'est mise à jour lorsque vous détachez HEAD du référentiel. Vous pourriez penser à l'état de tête détaché comme si vous aviez une branche anonyme empruntée.
Pour remettre en place la tête de votre dépôt, vous voulez enregistrer le HEAD courant comme une branche et vérifiez que ramifient:
Pour enregistrer le HEAD courant dans une nouvelle branche faire :
git branch <new-branch-name>
pour remplacer une branche existante, vous devez utiliser --force
:
git branch --force <existing-branch-name>
Rattachez tête de votre référentiel en vérifiant la nouvelle/branche mise à jour:
git checkout <branch-name>
(où <branch-name>
est le même que <new-branch-name>
ou <existing-branch-name>
, selon lequel des deux ci-dessus les commandes que vous avez utilisé)
Cette séquence (git branch
pour faire un point de ref à la validation HEAD en cours, puis git checkout
cette branche mise à jour) portera tout contenu non engagé que vous pourriez avoir dans votre index de travail et/ou arbre.
À l'avenir, si vous voulez «faire reculer la branche courante à certains précédente livraison, vous devez utiliser ce au lieu de détacher votre dépôt de HEAD:
git reset --hard <commit>
Cela réinitialisera la branche courante (ou votre HEAD détaché, si elle est déjà détachée) au commit nommé, et fait que l'index et l'arbre de travail reflètent ce commit (c'est-à-dire qu'il rejette tout commit depuis le commit spécifié avec tout contenu non-validé). L'état HEAD détaché est utile pour revoir les anciens états, et parfois pour le travail à court terme que vous n'êtes pas sûr de conserver.A part ça, vous voulez probablement l'éviter.
Merci, cela va retourner l'arbre de travail dans la branche? – Bob
C'est ce que vous auriez probablement dû faire au début, mais cela ne réglera pas votre situation. Si votre TETE est toujours détachée, elle ne sera pas rattachée à une branche. S'il vous plaît voir ma réponse. –
Il va réinitialiser votre tête actuelle à la validation spécifiée. Vous aurez donc besoin de 'git checkout master' (ou de n'importe quelle branche que vous voulez restaurer), puis utilisez la commande' git reset'. – Chris