J'ouvre mon référentiel Git à l'aide de gitExtensions sur Windows 7 pour un projet Visual Studio. Il est soudainement vide. Le référentiel existe, mais tous mes commits ont disparu.
J'utilise l'interface graphique et je crois que c'est la première fois que je l'ouvre depuis qu'ils l'ont mise à jour.
Je ne sais pas quoi faire pour récupérer mes engagements.
Quand je tape
git log
je reçois
fatal: mauvaise révision par défaut 'HEAD'
Mise à jour
Après avoir consulté /programming/1545407/recovering-broken-git-repository j'ai essayé
git fsck
il est revenu:
erreur: invalide HEAD
fatal: l'objet lâche 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (stocké dans .git / obj ects / 36 / b7d9e1ca496bcb864c0b9c8671fcec97fbda31) est corrompu
Validation des retours:
erreur: impossible de résoudre la référence HEAD: aucun fichier ou répertoire de ce type n'est
fatal: impossible de verrouiller la référence HEAD
et journalisation des retours de branche principale
$ git log master warning: ignorer les références / têtes / maître de référence cassées. avertissement: ignorer les références / têtes / maître de référence cassées. fatal: argument ambigu 'master': révision inconnue ou chemin d'accès absent de l'arborescence de travail. Utilisez '-' pour séparer les chemins des révisions
Je vais juste continuer à coller des choses qui pourraient être pertinentes
$ git reflog master
warning: ignorer les références / têtes / maître de référence cassées.
avertissement: ignorer les références / têtes / maître de référence cassées.
fatal: argument ambigu 'master': révision inconnue ou chemin d'accès absent de l'arborescence de travail.
Utilisez '-' pour séparer les chemins des révisions
Plus d'informations éventuellement utiles: chaque fois que je supprime le fichier corrompu, un autre prend sa place. Je commence à penser que c'est quelque chose à voir avec la branche principale pointant vers la mauvaise chose ou quelque chose. parce que je suppose que la tête pointe vers le maître.
Un jour plus tard:
j'ai donc mis mon compagnon là-dessus, il a pu parcourir les journaux et il a dit que les hachages dans les journaux ne correspondaient pas aux objets du dossier. Il a essayé de réinitialiser la branche principale aux journaux ou quelque chose comme ça, je me suis un peu perdu. J'espère que c'est utile
Réponses:
Que veux-tu dire exactement? L'arbre de travail est-il toujours là?
.git/
Existe- t- il? Y a-t-il des fichiers dedans?Les messages que vous avez publiés suggèrent que le fichier
.git/HEAD
n'existe pas. Il définit l'état attendu de l'arborescence de travail (ce que vous aviez extrait). Si ce fichier a disparu, git ne sait pas où vous étiez.Vous pouvez essayer de créer le fichier vous-même, avec ce contenu:
ref: refs/heads/master
Si vous étiez sur une branche différente, remplacez simplement "master" par le nom de la branche. Si vous n'étiez pas sur une succursale, ce serait plus compliqué.
.git/logs/HEAD
enregistre les états passés de HEAD, avec les lignes suivantes en bas. Cet exemple de ligne montre une extraction:25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch
Les SHA1 en face font référence à des commits. Vous devriez pouvoir les trouver dans le journal de branche, par exemple
.git/logs/refs/heads/master
.La sortie git reflog que vous avez donnée
refs/heads/master
manque également. Son seul contenu est censé être le SHA1 du dernier commit sur celui-ci (et une nouvelle ligne). Vous pouvez trouver le dernier SHA1 à la fin du journal de branche, par exemple.git/logs/refs/heads/master
.la source
Si .git / HEAD existe et que son contenu est
ref: refs/heads/master
alors vérifie le fichier refs / heads / master il doit contenir le sha1 du dernier commit.Si ce fichier était corrompu et plein de caractères NULL Modifiez ce fichier et mettez le sha1 du dernier commit de
.git/logs/HEAD
ou celui avant le dernier commit.Alors fais
git reset --hard 'sha1 of the commit that you selected'
la source
Il semble que votre dépôt ait été corrompu. La chose la plus simple à faire serait de récupérer votre dépôt à partir d'une sauvegarde ou de recloner le dépôt à partir de la source d'origine (en supposant que vous n'aviez pas des tonnes de travail dans le dépôt).
Si le resotring / clonage n'est pas une option, je recommanderais de lire Pro Git (livre en ligne gratuit ou version papier ). L'ensemble du livre est très informatif, mais surtout jetez un œil au dernier chapitre pour comprendre comment Git fonctionne en interne. Une fois que vous avez compris le fonctionnement de Git, consultez les instructions de Linus sur la récupération d'objets corrompus .
la source
Après avoir navigué sur le Web pendant un certain temps, j'ai finalement trouvé cela et cela a fonctionné.
la source
origin
(si tout va bien pas trop de travail effectué localement), puis force lamaster
branche locale à se mettre d'accord avec la télécommande. Attention,--reset
signifie éliminer tous les changements locaux! De plus, s'il n'était pas trop cassé, ilgit reset origin/master
aurait juste restauré le dernier état connu (enregistré) de lamaster
branche.