web-dev-qa-db-fra.com

Git 'fatal: No such ref: HEAD'

Une chose étrange est arrivée à mon dépôt git. Lorsque j'essaie de valider quelque chose dans la fenêtre tortoisegit, je reçois tous les fichiers du projet. Je ne peux pas les annuler, lorsque je tire du serveur, je reçois fatal: No such ref: HEAD et fatal: Cannot lock the ref 'HEAD'. Toutes mes succursales locales sont manquantes. Existe-t-il un moyen de résoudre le problème?

Ce n'est pas le premier commit ou quelque chose. Cette chose est arrivée soudainement.

ÉDITER:

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é le nom du dossier du référentiel pendant un certain temps, et quand je l'ai changé, les choses n'étaient pas correctes.

45
szaman

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

Vous devriez maintenant pouvoir exécuter d'autres commandes git et voir où vous en êtes.

(Bien que, en théorie, vous puissiez essayer de faire git symbolic-ref HEAD refs/heads/master les nouvelles versions de git ne reconnaissent pas .git en tant que dépôt git, sauf s'il contient déjà un HEAD, donc cela ne fonctionnera pas pour en créer un nouveau.)

67
CB Bailey

HEAD est généralement une référence à une branche particulière; dans votre cas, il semble que les pointeurs de branche aient disparu, donc la référence HEAD ne peut pas être résolue.

Vous pouvez utiliser git fsck --lost-found pour rechercher dans le cache d'objets des objets inaccessibles; en particulier, vous vous intéressez aux commits, qui peuvent ensuite être trouvés ci-dessous .git/lost-found/commit/; ce sont des pointeurs vers vos branches, tout ce que vous avez à faire est de découvrir laquelle est laquelle et de créer de nouvelles références en utilisant git branch.

6
Simon Richter

Je pense que cette réponse peut être utile pour quelqu'un. J'ai presque résolu ce problème. Tout d'abord, comme Charles Bailey l'a écrit, j'ai utilisé

echo ref: refs/heads/master >.git/HEAD

Ensuite, ma branche a changé pour devenir maître. J'ai commis des modifications et j'ai pu passer à ma branche principale. Le problème était que je ne pouvais utiliser aucune de mes succursales locales. En particulier, je voulais travailler sur la branche 812. J'ai donc trouvé le dernier commit sur la branche 812 (créer un message lorsque la validation est très utile;)) et je suis passé à celle-ci. Ensuite, j'ai créé la branche 812 sur la base de celle vers laquelle je suis passé. Malheureusement, certains fichiers manquaient. Heureusement, je les avais sur le repo cassé que j'ai copié avant 'écho'

6
szaman

Pour moi, le problème était que sur Mac OS X, l'indicateur '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 .
2