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.

45
demandé sur tom 2011-01-31 10:39:48

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.)

67
répondu CB Bailey 2015-03-13 03:26:12

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.

6
répondu Simon Richter 2011-01-31 07:58:27

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'

6
répondu szaman 2011-01-31 09:29:40

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 .
2
répondu Hans-Christoph Steiner 2012-06-08 23:35:04