Git 'fatal: pas de tel ref: HEAD'
Une chose étrange s'est produite dans mon dépôt git. Quand j'essaie de commettre quelque chose dans la fenêtre tortoisegit, je reçois tous les fichiers du projet. Je ne peux pas les rétablir, quand je tire du serveur, je reçois fatal: No such ref: HEAD
et fatal: Cannot lock the ref 'HEAD'
. Toutes mes branches locales sont manquantes. Est-il possible de résoudre le problème?
Ce n'est pas le premier commit ou quelque chose comme ça. Cette chose s'est produite soudainement.
Modifier:
git branch -a
dit: Failed to resolve HEAD as a valid ref
git status
imprime tous les fichiers de projet marqués comme nouveau fichier.
J'ai changé nom du dossier du référentiel pendant un certain temps, et quand je l'ai changé, les choses n'étaient pas correctes.
4 réponses
Vous avez perdu votre HEAD
vous devrez donc le recréer. La chose la plus simple à faire est la suivante.
echo ref: refs/heads/master >.git/HEAD
Maintenant, vous devriez pouvoir exécuter d'autres commandes git et voir où vous en êtes.
(Bien que, en théorie, vous pourriez essayer de faire git symbolic-ref HEAD refs/heads/master
les nouvelles versions de git ne reconnaissent pas un .git
en tant que dépôt git à moins qu'il ne contienne déjà un HEAD
donc cela ne fonctionnera pas pour en créer un nouveau.)
HEAD
est généralement une référence à une branche particulière; dans votre cas, il semble que les pointeurs de branche ont disparu, donc la référence HEAD ne peut pas être résolue.
Vous pouvez utiliser git fsck --lost-found
pour analyser le cache d'objets à la recherche d'objets inaccessibles; plus précisément, vous êtes intéressé par les commits, qui peuvent ensuite être trouvés ci-dessous .git/lost-found/commit/
; ce sont des pointeurs vers vos branches, tout ce que vous devez faire est de savoir qui est qui, et créer de nouvelles références en utilisant git branch
.
Je pense que cette réponse peut être utile pour quelqu'un. J'ai résolu ce problème de près. Tout d'abord ce que J'ai fait était, comme Charles Bailey a écrit, use
echo ref: refs/heads/master >.git/HEAD
Ensuite, ma branche a changé pour master. J'ai engagé des changements et j'ai pu passer à ma branche principale. Le problème était que je n'étais pas capable d'utiliser l'une de mes branches locales. Surtout je voulais travailler sur la branche 812. J'ai donc trouvé la dernière validation à la branche 812 (créer un message lorsque la validation est très utile ;)) et j'y suis passé. Ensuite j'ai créé la branche 812 basé sur celui que je suis passé à. Malheureusement, certains fichiers manquaient. Heureusement, je les avais sur le repo cassé Que j'ai copié avant 'echo'
Pour moi, le problème était que sur Mac OS X, le drapeau' uchg 'ou' uappnd ' était défini, verrouillant certains fichiers git indépendamment des perms. J'ai réinitialisé les chflags comme ceci et il l'a résolu pour moi:
sudo chflags -R 0000 .