Ich öffne mein Git-Repository mit gitExtensions unter Windows 7 für ein Visual Studio-Projekt. Es ist plötzlich leer. Das Repository existiert, aber alle meine Commits sind verschwunden.
Ich benutze die grafische Benutzeroberfläche und glaube, dass dies das erste Mal ist, dass ich sie geöffnet habe, seit sie sie aktualisiert haben.
Ich bin mir nicht sicher, was ich tun soll, um meine Commits zurückzuerhalten.
Wenn ich tippe
git log
ich erhalte
fatal: schlechte Standardrevision 'HEAD'
Update
Nachdem ich mir https://stackoverflow.com/questions/1545407/recovering-broken-git-repository angesehen habe, habe ich es versucht
git fsck
es kam zurück:
Fehler: Ungültiger HEAD-Fehler: Das
lose Objekt 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (gespeichert in .git / obj ects / 36 / b7d9e1ca496bcb864c0b9c8671fcec97fbda31) ist beschädigt
Festschreiben von Renditen:
Fehler: Referenz HEAD
kann nicht aufgelöst werden : Keine solche Datei oder Verzeichnis ist fatal: HEAD ref kann nicht gesperrt werden
und Protokollieren der Master-Verzweigungsrückgabe
$ git log master Warnung: Ignoriere defekte refs / heads / master. Warnung: Ignorieren von defekten Refs / Heads / Master. fatal: mehrdeutiges Argument 'master': unbekannte Revision oder Pfad nicht im Arbeitsbaum. Verwenden Sie '-', um Pfade von Revisionen zu trennen
Ich werde einfach weiter Dinge einfügen, die relevant sein könnten
$ git-Reflog-Master-
Warnung: Unterbrochene Refs / Köpfe / Master werden ignoriert.
Warnung: Ignorieren von defekten Refs / Heads / Master.
fatal: mehrdeutiges Argument 'master': unbekannte Revision oder Pfad nicht im Arbeitsbaum.
Verwenden Sie '-', um Pfade von Revisionen zu trennen
Weitere nützliche Informationen: Jedes Mal, wenn ich die beschädigte Datei lösche, findet eine neue statt. Ich beginne zu denken, dass es etwas mit dem Hauptzweig zu tun hat, der auf das Falsche oder etwas zeigt. denn ich nehme an, der kopf zeigt auf master.
Ein Tag später:
Also habe ich meinen Kumpel dazu gebracht, er konnte die Protokolle durchgehen und er sagte, dass die Hashes in den Protokollen nicht mit den Objekten im Ordner übereinstimmen. Er hat versucht, den Hauptzweig auf die Protokolle zurückzusetzen, oder so, ich habe mich ein bisschen verlaufen. Hoffe das ist hilfreich
Antworten:
Was genau meinst du? Ist der Arbeitsbaum noch da? Gibt
.git/
es Gibt es irgendwelche Dateien darin?Die von Ihnen geposteten Nachrichten weisen darauf hin, dass die Datei
.git/HEAD
nicht vorhanden ist. Es definiert den erwarteten Zustand des Arbeitsbaums (was Sie ausgecheckt hatten). Wenn diese Datei weg ist, weiß git nicht, wo Sie waren.Sie können versuchen, die Datei mit folgendem Inhalt selbst zu erstellen:
ref: refs/heads/master
Wenn Sie sich in einem anderen Zweig befanden, ersetzen Sie einfach "master" durch den Namen des Zweigs. Wenn Sie nicht in einem Zweig wären, wäre es komplizierter.
.git/logs/HEAD
Zeichnet vergangene HEAD-Zustände mit späteren Zeilen unten auf. Diese Beispielzeile zeigt eine Kaufabwicklung:25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch
Die vorangestellten SHA1s beziehen sich auf Commits. Sie sollten diese beispielsweise im Zweigprotokoll finden
.git/logs/refs/heads/master
.Die Ausgabe des Git-Reflogs, die Sie angegeben haben, scheint ebenfalls zu
refs/heads/master
fehlen. Sein einziger Inhalt soll der SHA1 des neuesten Commits (und eine neue Zeile) sein. Sie finden den neuesten SHA1 beispielsweise am Ende des Verzweigungsprotokolls.git/logs/refs/heads/master
.quelle
Wenn .git / HEAD existiert und sein Inhalt
ref: refs/heads/master
überprüft wird, muss die Datei refs / heads / master den sha1 des letzten Commits enthalten.Wenn diese Datei beschädigt und voll mit NULL-Zeichen war Bearbeiten Sie diese Datei und geben Sie den Wert 1 des letzten Commits von
.git/logs/HEAD
oder den Wert 1 vor dem letzten Commit ein.Dann mach
git reset --hard 'sha1 of the commit that you selected'
quelle
Es klingt wie Ihr Repo beschädigt wurde. Am einfachsten ist es, Ihr Repo von einem Backup wiederherzustellen oder das Repo von der ursprünglichen Quelle erneut zu klonen (vorausgesetzt, Sie hatten nicht viel Arbeit im Repo).
Wenn Resotring / Cloning keine Option ist, würde ich empfehlen, Pro Git (kostenloses Online-Buch oder Papierversion ) zu lesen . Das ganze Buch ist sehr informativ, aber werfen Sie vor allem einen Blick auf das letzte Kapitel, um zu verstehen, wie Git intern funktioniert. Wenn Sie sich mit der Funktionsweise von Git vertraut gemacht haben, lesen Sie die Anweisungen von Linus zum Wiederherstellen beschädigter Objekte .
quelle
Nachdem ich eine Weile im Internet gesurft hatte, fand ich das endlich und es funktionierte.
quelle