Voici mon cas:
Mais tout à coup, après avoir tapé la commande git checkout master
, mon ordinateur rencontre un écran bleu de la mort et une fermeture inattendue se produit. Après avoir redémarré mon ordinateur, j'ai vérifié l'état de ma branche actuelle et, par conséquent, chaque fichier a été marqué comme nouveau fichier.
Maintenant, je suis bloqué à ce stade et après la commande git log
, une erreur se produit.
$ git log
fatal: your current branch appears to be broken
Comment résoudre ce problème et récupérer ma branche ?.
Je travaille avec Windows 7 et la dernière version de git bash
Edit: Je ne veux pas supprimer cette branche.
Je rencontre un problème similaire sur Windows 7. Dans mon cas, le fichier de branche actuel (voir ./git/HEAD
) sous \.git\refs\heads
était cassé.
J'ai trouvé le code de hachage de la branche en cours cassée sur .git\logs\refs\heads
avec le même nom de branche.
Et j'ai résolu le problème en ouvrant ce fichier (.git\logs\refs\heads\xxx
) via le bloc-notes et en copiant le 4ème numéro (le code de hachage) dans (.git\refs\heads\xxx
)
Les fichiers du répertoire .git\refs\heads sont vos branches . Vérifiez ces fichiers. Ils ne doivent contenir qu'un seul objet de hachage SHA-1 de validation. Ce hachage correspond à votre dernière touche SHA-1 et à votre HEAD en même temps.
Copiez la clé SHA-1 et tapez
$ git cat-file -t 5917fefd485f655ab369d4e9eeda3c157c03f514
commit
$ git cat-file -p 5917fefd485f655ab369d4e9eeda3c157c03f514
tree b75cab3c54b780075b312be3e878b389a2baf904
parent 8235189aa22169295243d295fb1cc2ff2f8f7cd5
author Ilker Cat <[email protected]> 1495136738 +0200
committer Ilker Cat <[email protected]> 1495136738 +0200
La deuxième sortie est ce que contient un objet commit. Essayez de vérifier si l'objet commit de votre branche master sous .git\refs\heads\master et ses clés SHA-1 arborescente et parent ne sont pas endommagés.
Même certaines apostrophes à l'intérieur de votre fichier de branches maître mèneront à une "branche cassée". Il ne doit contenir que le dernier hachage de l'objet SHA-1 validé et rien d'autre.
Vous pouvez rencontrer cette erreur si vous essayez de renommer une branche en branche de noms de lieux (ou de dossiers).
Si cela se produit, allez dans les répertoires .git/logs/refs/heads/<name>
et .git/refs/heads/<name>
et vous verrez que votre branche est maintenant un dossier contenant un fichier.
Dans les deux dossiers, déplacez le fichier au niveau du dossier, vérifiez cette branche, supprimez les dossiers maintenant vides et vous devriez maintenant pouvoir exécuter git checkout -b <name>/<subname>
sans erreur ou git branch -M <name>/<subname>
.
Votre nom de branche contient maintenant probablement des caractères spéciaux ou quelque chose comme ça.
Vous devriez aller dans le répertoire racine de votre extraction (où se trouve le répertoire .git/
) et
.git/packed-refs
; si vous voyez une ligne avec le nom de votre branche, supprimez-la.git/refs/heads for
un fichier nommé d'après votre branche; si vous en voyez un, supprimez-leParfois, cela peut également être dû à des problèmes d’autorisation de fichier. Vérifiez si vous disposez des autorisations appropriées sur tous les fichiers du référentiel.
Avait le même problème . Suppression de .git\refs\heads\résolu le problème pour moi.
Je l'ai résolu en clonant le référentiel dans un nouveau dossier, puis en remplaçant les fichiers modifiés. Cela ne semble pas être une bonne solution, mais c'est sûr!