2009-10-09 14 views
9

Mein Arbeits Git Repository ist gebrochen, es Track auf alle Dateien darin verlieren, das heißtWiederherstellen gebrochen git-Repository

 
$ git log 
fatal: bad default revision 'HEAD' 
 
$ git status 
... told me that all the files are new 

jedoch das .git Verzeichnis meine Objekte enthält.

 
$ du -sh .git 
34M .git 
 
$ git count-objects 
4151 objects, 32692 kilobytes 
 
$ git --version 
git version 1.6.0.4 

Das letzte, was ich tun erinnern, bevor es falsch war, ging die Schaffung (Klon --mirror) ein Backup-Repository in einem-NFS-Server. Das geklonte Backup-Repository wird jedoch auf die gleiche Weise unterbrochen.

Wie kann ich mein Repository wiederherstellen?

+0

Gibt es in Ihrem Repository einen 'Master'-Zweig? Erhalten Sie ein anderes Ergebnis mit 'git log --all'? –

+0

Nein, 'git branch -a' sagt mir nichts. – Eyoka

Antwort

8

Es muss etwas außer dem Klon gegeben haben, aber ich weiß, wie schwer es ist, sich an diese Dinge zu erinnern.

Das erste, was Sie tun möchten, ist in .git/refs zu gucken und zu sehen, ob dort irgendetwas Gültiges ist (ich bin nicht zu optimistisch, da Sie sagen, dass es keine Zweige zu geben scheint, aber es lohnt sich ein Schuss). Wenn gültige Referenzen vorhanden sind, können Sie möglicherweise Informationen von git-reflog erhalten.

Als nächstes würde ich einen Blick auf git-fsck werfen. Sein Hauptzweck besteht darin, die Konnektivität und Gültigkeit von Objekten in der Datenbank zu überprüfen. Je nachdem, was genau mit Ihrem Repo passiert ist, benötigen Sie möglicherweise --unreachable oder --lost-found. Hoffentlich sind die Objekte intakt, also musst du nur ein paar freie Commit-Hashes finden, um Zweige zu überprüfen und neu zu erstellen.

+0

Danke. Ich habe das Repository manuell repariert. Es stellte sich heraus, dass die Zweige (Dateien in .git/refs/heads) fehlten, aber die Objekte intakt waren. Ich konnte Commit-Hashes der Spitze jeder Verzweigung von .git/logs/HEAD erhalten und verwendete sie, um die Verzweigungsdateien neu zu erstellen. Ich kannte den Befehl git-fsck nicht. Allerdings bin ich immer noch neugierig, wie das passiert ist, offensichtlich habe ich

git branch -d
nicht getan. Ich kenne nicht viele Git-Befehle, die einzigen, an die ich mich erinnere, waren
git reset
und
git remote rm ...
Eyoka

1

Sie können manuell prüfen, aber das würde einige Kenntnisse über das Format des Repository erfordern.

Ohne das Repository zu betrachten ist schwer zu sagen, was passiert, aber wahrscheinlich wurde eine Datei beschädigt.

Führen Sie git fsck aus und es wird feststellen, ob Ihr Repository noch gültig ist.

Veröffentlichen Sie das Ergebnis des Git fsck run und das sollte uns helfen, Ihnen zu helfen.

1

Versuchen Sie zu überprüfen, ob jede Ihrer Dateien in .git/dem aktuellen Benutzer gehört.

Ich hatte das gleiche Problem, als ich feststellte, dass ich einige Commits mit root-Benutzer gemacht habe und Objekte (unter .git/objects) erstellt habe, die root gehören, trigering errors, wenn git als normaler Benutzer ausgeführt wird.

Dieser Befehl löste das Problem:

sudo chown jb:jb .git/ -R * 
1

ich nach meinem GitHub Anwendung gerade dieses Problem bekam (PC) abgestürzt. Mein Zweig verschwand bei der Verwendung von git branch und es brachte mich dazu, mein erstes Commit zu machen. Ich löste es, indem ich meine Niederlassung in .git/refs/heads/ lokalisiere und sie von mybranch.lock zu nur mybranch umbenenne (das Schloss entfernen).

+0

Diese Antwort half in meinem Fall. Ich benutzte GitHub für Windows und behandelte plötzlich jede Datei im Repository als neue Datei. git log gab "fatal: bad default revision 'HEAD'" zurück. Git fsck gab eine Reihe von unerlaubten Commits zurück. Ich musste einfach Datei master.lock in Master umbenennen –

0

Ich hatte dieses Problem, nachdem ein Entwickler eine $ git init in den bare Master eines zentralisierten Repo getan hat.Wenn Sie mit einem Repository ohne Arbeitsverzeichnis arbeiten, suchen Sie nach einem Ordner .git; Das Löschen dieses Problems sollte das Problem beheben.