47 votes

Git 'fatal : No such ref : HEAD'.

Un truc bizarre est arrivé à mon dépôt git. Lorsque j'essaie de commettre quelque chose dans la fenêtre de 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 y fatal: Cannot lock the ref 'HEAD' . Toutes mes branches locales sont absentes. Existe-t-il un moyen de résoudre ce problème ?

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

EDITAR:

git branch -a dit : Failed to resolve HEAD as a valid ref

git status imprime tous les fichiers du projet marqués comme nouveau fichier.

J'ai changé le nom du dossier de dépôt pendant un certain temps, et quand je l'ai changé à nouveau, les choses n'étaient pas correctes.

0 votes

Qu'avez-vous fait quand c'est arrivé ? Pouvez-vous montrer la sortie de git status y git branch -a ?

0 votes

Pour éviter tout doute, par dossier de dépôt, voulez-vous dire le dossier nommé .git ?

0 votes

Non, un dossier de projet, qui contient directement les fichiers .git.

68voto

Charles Bailey Points 244082

Vous avez perdu votre HEAD donc vous devrez le recréer. La chose la plus simple à faire est la suivante.

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

Vous devriez maintenant être en mesure d'exécuter d'autres commandes git et de 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 les fichiers de type .git comme dépôt git, à moins qu'il ne contienne déjà un dépôt git. HEAD donc cela ne fonctionnera pas pour en créer un nouveau).

1 votes

Ok, j'ai fait comme tu as écrit. Après l'écho, j'étais sur la branche master, j'ai fait un commit et j'ai pu passer à ma branche principale. Mais maintenant, lorsque j'essaie de passer à l'une de mes branches locales, je reçois 'error : pathspec '812' did not match any file(s) known to git'.

1 votes

@szaman : Je ne sais pas, mais on dirait que le manquant HEAD n'est pas la seule chose qui soit corrompue dans votre dépôt. Pouvez-vous le restaurer à partir d'une sauvegarde ou le cloner à nouveau ?

0 votes

Je l'ai résolu... presque. Après avoir appliqué votre conseil, j'ai regardé le journal du repo. Il ne manquait que le dernier commit, j'ai donc créé une nouvelle branche basée sur le dernier 812 que j'ai trouvé. Maintenant je peux y basculer. Les fichiers du dernier commit peuvent être pris de la copie du dépôt cassé, parce que je travaillais sur 812 quand ce crash est arrivé. Merci beaucoup pour votre aide

7voto

Simon Richter Points 11471

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 scanner le cache des objets à la recherche d'objets inaccessibles ; plus précisément, vous êtes intéressé par les commits, qui peuvent alors être trouvés ci-dessous .git/lost-found/commit/ ; il s'agit de pointeurs vers vos branches, tout ce que vous avez à faire est de trouver laquelle est laquelle, et de créer de nouvelles références en utilisant la commande git branch .

0 votes

Avez-vous utilisé le --lost-found option ?

0 votes

A-t-il créé le lost-found répertoire ?

0 votes

Oui, il l'a créé mais le dossier commit contient beaucoup moins de fichiers que les branches locales.

6voto

szaman Points 2010

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

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

Puis ma branche est devenue master. J'ai commité les changements et j'ai pu passer à ma branche principale. Le problème était que je n'étais pas en mesure d'utiliser aucune de mes branches locales. En particulier, je voulais travailler sur la branche 812. J'ai donc trouvé le dernier commit de la branche 812 (create message when commit is very helpful ;)) et j'ai basculé dessus. Ensuite, j'ai créé la branche 812 basée sur celle que j'ai choisie. Malheureusement, certains fichiers étaient manquants. Heureusement, je les avais sur le dépôt cassé que j'ai copié avant 'echo'.

2voto

Pour moi, le problème était que sur Mac OS X, soit le drapeau 'uchg', soit le drapeau 'uappnd' était activé, verrouillant certains fichiers git sans tenir compte des paramètres. J'ai réinitialisé les drapeaux comme ceci et cela a résolu le problème pour moi :

sudo chflags -R 0000 .

0 votes

J'avais aussi des problèmes de permission sous Linux.

0 votes

Oui, GNU/Linux respectera les chflags lorsqu'il montera HFS+.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X