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