Git-Status zeigt fatal: schlechtes Objekt HEAD

71

Ich habe ein Problem mit Git unter Windows Azure. Git-Status zeigt - "fatal: schlechtes Objekt HEAD" und ich habe versucht zu laufen:

 git fsck --full
 git gc

Aber git fsckzeigt:

broken link from  commit 739df633f185ce5d1ab7eb97d619b28e7d81185a
              to    tree 2a6d4876d135c1fa7cbe1348c62570006e895fc5
broken link from  commit 9c7eae5ffed34dbfac977e515dee675626b59f93
              to    tree 400132d215ab9aced883a9971e648b82624b2032
broken link from  commit 9c7eae5ffed34dbfac977e515dee675626b59f93
              to  commit 4a49af0a0cb64a0a0415734b11772d6df18561fb
broken link from  commit bc3072f30e71c616a8196089e19a67a2c9c0a5ad
              to    tree 0aa813c183487d0a1b1f7ae81501ca7a1168283f
broken link from  commit d3bb4f8545e91ec8ace15ad31a3147d92a1d4242
              to    tree 4682108accd8e72fe68858232386dffe60f9f02d
broken link from  commit 6b34795c4b54286301bcdc0ed254a04c132cb2ad
              to    tree 5c57dd3222d11924dba841d3cae517bdc9220601
broken link from  commit d70172d855391b93bc1c5eeb9b4226df525dfc6e
              to  commit 390c8cbd527c8e707c51e25142e54421f4dd3948
broken link from  commit cc05e8d2e3733693ebb67d697ae4b65e51fea79a
              to  commit 32f081f8b901425fd1e8898478f0551970bee0f5
broken link from    tree 6a75ed6d0311d800078e77f43d427d128372d5bc
              to    blob 4a064d610c0e7207967d59934c8bc5f491f26dae
broken link from    tree 6a75ed6d0311d800078e77f43d427d128372d5bc
              to    tree 5c06ec964dcbade49287d0f36efe1f7b60f446e3
broken link from    tree b4855fa6734b5652a93a9b799eafe47fad0d13a0
              to    blob 3e1fb421613dc9066cbf9c95eddc61619a9f8eed
broken link from    tree b4855fa6734b5652a93a9b799eafe47fad0d13a0
              to    tree 556a50048d42346c283c94b78ea278ba1d57d251
broken link from    tree 289c03409370c4ca7c12266ce2822a2976bd032b
              to    blob 3abf3c48ada45f63404dcf4d675ddfdadcfa83c6
broken link from    tree 289c03409370c4ca7c12266ce2822a2976bd032b
              to    blob 3fa569892003b468ed1301426dd6d96d9644be3c
broken link from    tree 289c03409370c4ca7c12266ce2822a2976bd032b
              to    blob 0a9a54a51e84f3bc34122dbce1146d895fcbe22c
broken link from    tree 289c03409370c4ca7c12266ce2822a2976bd032b
              to    blob 3fa48873564361b4d95830803ae77f79eeafaf5b

git branch zeigt - * Meister

dotnetrocks
quelle
Es sieht so aus, als ob das Repository auf Dateisystemebene defekt ist. Um HEAD wiederherzustellen, schreiben Sie etwas Sinnvolles an .git/HEAD, wie 739df633f185ce5d1ab7eb97d619b28e7d81185aoder ref: refs/heads/master(wenn der masterZweig in Ordnung ist). Es ist jedoch unwahrscheinlich, dass das Repository repariert wird.
Vi.
Ich denke nicht, dass HEAD selbst kaputt ist, sondern das, worauf es letztendlich hinweist.
Ikke
Ich hatte den gleichen Fehler - habe ihn aber git fsckbereits für mich behoben. Danke 😅
Tillus

Antworten:

45

Ihr Repository ist beschädigt. Das bedeutet, dass Daten verloren gehen, die von git selbst nicht wiederhergestellt werden können. Wenn Sie einen anderen Klon dieses Repositorys haben, können Sie die Objekte von dort wiederherstellen oder einen neuen Klon erstellen.

fatal: bad object HEAD bedeutet, dass der von HEAD referenzierte Zweig auf ein fehlerhaftes Festschreibungsobjekt verweist, was bedeuten kann, dass es fehlt oder beschädigt ist.

An der Ausgabe von git fsckkönnen Sie erkennen, dass einige Tree-, Blob- und Commit-Objekte fehlen.

Beachten Sie, dass die Verwendung von git selbst nicht ausreicht, um die Datensicherheit zu gewährleisten. Sie müssen es in Fällen von Korruption noch sichern.

Ikke
quelle
67

versuchen Sie dies: arbeitete für mich rm -rf .git

Sie können mvanstelle von verwenden, rmwenn Sie Ihre versteckten Commits nicht verlieren möchten

Kopieren Sie dann .git von einem anderen Klon

cp <pathofotherrepository>/.git . -r

dann mach

git init

Dies sollte Ihr Problem lösen, ALLES BESTE

Ganesh
quelle
Ich suchte nach einem kniffligen Git-Befehl, aber dieser ist schnell und sauber genug.
YB Ursache
4
Es klappt! Vielen Dank! Aber es gibt eine Warnung ... Sie verlieren alle Dinge, die sich nicht in Ihrem Arbeitsverzeichnis befinden (lokale Zweige, Stash usw.). Vielleicht möchten Sie mvstattdessen rm -rfversuchen, etwas Letzteres wiederherzustellen ;-)
Fernando Almeida
@FernandoAlmeida Ja, das ist richtig, wenn Sie sich wirklich erholen wollen, können Sie nur mvinstaed verwenden rm, danke Kumpel :-)
Ganesh
Dies sollte meiner Meinung nach die akzeptierte Antwort sein. Während Ikke sehr gute Informationen gibt, ist dies der Fix, nach dem dotnetrocks gesucht hat ...
Michael P
Wunderschön wie ein Zauber gearbeitet: hervorragend. Ein paar abschließende Befehle, wenn jemand speziell für mich interessiert war: git pull origin master --allow-unrelated-histories | git checkout --ours [yourmainfolder] / (oder --theirs: Akzeptiere Remote-Versionen. --ours akzeptiere lokale Versionen) | Git-Status | git add --all | Git-Status | git commit -m "Erstes Commit nach git beschädigten Dateien" | Git Push Origin Master> Vielen Dank, tolle, tolle Lösung :))
Vladimir Brasil
30

Dies geschah, weil ich versehentlich eine Kerndatei von GIT entfernt habe. Versuchen Sie das, es hat bei mir funktioniert.

Git neu initialisieren

git init

Daten von der Fernbedienung abrufen

git fetch

Überprüfen Sie nun alle Ihre Änderungen und den Git-Status von

git status
Mahesh Gareja
quelle
Ich musste git (Homebrew) aktualisieren, wenn ich einen Segfault bekam. Danach git fetchmusste ich einen git pullSchnellvorlauf durchführen (es heißt, mein Baum steht hinter HEAD), bevor git statusich etwas Nützliches sehen konnte.
Kakyo
16

Laufen

git remote set-head origin --auto

gefolgt von

git gc
Rechnung
quelle
7
Diese! Mein Ursprung hatte seinen Hauptzweig von masternach umbenannt main. Diese Antwort löste das Problem.
Iain Ballard
Hinzufügen git fetch, dann git merge origin/HEADdann git pushfür mich gearbeitet.
Thebtm
12

Ihr Repository ist kaputt. Aber Sie können es wahrscheinlich beheben UND Ihre Änderungen beibehalten:

  1. Zuerst sichern: cp your_repository your_repositry_bak
  2. Klonen Sie das kaputte Repository (funktioniert immer noch): git clone your_repository your_repository_clone
  3. Ersetzen Sie den defekten .git-Ordner durch den aus dem Klon: rm -rf your_repository/.git && cp your_repository_clone/.git your_repository/ -r
  4. Klon & Backup löschen (wenn alles in Ordnung ist): rm -r your_repository_*
jan-glx
quelle
4
Diese Antwort fasst nur die Güter der Antworten von @ serup und @ ganesh zusammen .
Jan-Glx
12

In meinem Fall kam der Fehler aus dem Nichts, ließ mich aber nicht zum Remote-Zweig schieben.

git fetch origin

Und das hat es gelöst.

Ich bin damit einverstanden, dass dies das Problem möglicherweise nicht für alle löst, aber bevor Sie einen komplexeren Ansatz ausprobieren, versuchen Sie es mit diesem, nichts zu verlieren.

Felipe Pereira
quelle
3
Ich erhalte diesen Fehler häufig nach einer teilweisen Dateisynchronisierung zwischen Computern. Dies behebt es jedes Mal für mich.
Lionel Henry
Ich bin auch verwirrt und sauer, wie die Dateisynchronisierung funktioniert. Ich hatte solche Probleme mit Dropbox und Megasync. Dieses du -s .git.git- Verzeichnis soll mit zwei Knoten auf Client1 4.2M und 3.8Mauf Client2 synchronisiert werden. Ich weiß nicht, warum oder wie Synchronisierungsclients es schaffen, Dateien im
.git-Verzeichnis
9

Ich hatte ein ähnliches Problem und für mich funktionierte es, einen neuen Klon aus meinem ursprünglichen Repository zu erstellen

serup
quelle
1
Ich bin hier nach einem Windows 10-Absturz gelandet, als ich VS2017 (15.3.3) und git verwendet habe. Ich hatte keine ausstehenden Änderungen, daher habe ich mithilfe der obigen Antwort von @serup: - den Stammlösungsordner "C: \ Code \ MySolution" (der .git als Unterordner enthielt) entfernt. - dann von VSTS | Projekt = MySolution | Code | Auf der Hauptzweigseite habe ich auf die Schaltfläche "Klonen" geklickt und "In Visual Studio klonen" ausgewählt. Ich habe denselben Speicherort "C: \ Code \ MySolution" eingegeben. Alles sehr einfach (am Ende).
Peter
Das bedeutet, dass Sie lokale Niederlassungen verlieren, nicht wahr?
Bernhard Döbler
3

Ich habe es geschafft, ein ähnliches Problem zu beheben, als einige der Git-Dateien beschädigt waren:

https://stackoverflow.com/a/30871926/1737957

Suchen Sie in meiner Antwort auf diese Frage nach dem Teil, in dem ich dieselbe Fehlermeldung wie hier hatte:

fatal: bad object HEAD.

Sie könnten versuchen, dem zu folgen, was ich von diesem Punkt an getan habe. Stellen Sie sicher, dass Sie zuerst den gesamten Ordner sichern.

Natürlich könnte Ihr Repository auf ganz andere Weise beschädigt sein, und was ich getan habe, wird Ihr Problem nicht lösen. Aber es könnte Ihnen einige Ideen geben! Git-Interna scheinen magisch zu sein, aber es sind wirklich nur eine Reihe von Dateien, die wie alle anderen bearbeitet, verschoben und gelöscht werden können. Wenn Sie eine gute Vorstellung davon haben, was sie tun und wie sie zusammenpassen, haben Sie gute Erfolgschancen.

jwg
quelle
2

Ich habe das gelöst, indem ich Git Fetch gemacht habe. Mein Fehler war, dass ich meine Datei von meinem Hauptspeicher in meinen sekundären Speicher unter Windows 10 verschoben habe.

Royer Adames
quelle
0

Erstellen Sie eine Kopie Ihres Git-Verzeichnisses auf Ihrem lokalen Host und führen Sie git inites erneut aus. Schieben Sie das Projekt in ein brandneues Repository.

ulas korpe
quelle
0

Ich habe dieses Problem gelöst, indem ich die Zweigstellendaten (mit den Fehlern) in den lokalen Git-Ordner meines Apple-Laptops kopiert habe.

Irgendwie im Terminal und beim Ausführen: git status, sagt mir spezifischere Daten, wo der Fehler auftritt. Wenn Sie unter die Fehler schauen, sehen Sie hoffentlich eine Liste der fehlerhaften Ordner. In meinem Fall zeigte GIT den Ordner an, der für den Fehler verantwortlich war. Es ist mir gelungen, diesen Ordner zu löschen und die Zweigstelle festzuschreiben. Der Git-Status funktionierte wieder, die anderen Geräte wurden durch Git-Pull aktualisiert. Alles funktioniert wieder auf jeder Maschine.

Hoffentlich funktioniert das auch bei Ihnen.

Ricardo
quelle
0

Es ist unwahrscheinlich, dass dies die Ursache für Ihr Problem ist. Wenn Sie jedoch in .NET arbeiten, erhalten Sie eine Reihe von obj/Ordnern. Manchmal ist es hilfreich, alle diese zu löschenobj/ Ordner , um ein lästiges Build-Problem zu beheben.

Ich habe dasselbe fatal: bad object HEADin meinem aktuellen Zweig (Master) erhalten und konnte git statuskeinen anderen Zweig ausführen oder auschecken (ich habe immer einen bekommenerror refs/remote/[branch] does not point to a valid object ).

Wenn Sie alle Ihre objOrdner löschen möchten , werden Sie nicht faul und lassen Sie .git/objectsdie Mischung zu. In diesem Ordner befinden sich alle tatsächlichen Inhalte Ihrer Git-Commits.

Nachdem ich kurz davor war aufzugeben, entschied ich mich zu prüfen, welche Dateien sich in meinem Papierkorb befanden, und da war es. Die Datei wurde wiederhergestellt und mein lokales Repository war wie neu.

wdonahoe
quelle
0

Dies passierte mir bei einem alten einfachen Projekt ohne Zweige. Ich habe viele Änderungen vorgenommen und als ich fertig war, konnte ich mich nicht festlegen. Nichts oben hat funktioniert, also endete ich mit:

  1. Kopierte den gesamten Code mit meinen letzten Änderungen in einen Backup-Ordner.
  2. Git-Klon zum Herunterladen des neuesten Arbeitscodes zusammen mit dem Arbeitsordner .git.
  3. Kopierte meinen Code mit den neuesten Änderungen aus der Sicherung und ersetzte den geklonten Code (nicht den .git-Ordner).
  4. git add and commit funktioniert wieder und ich habe alle meine letzten Änderungen.
Andreas
quelle
-1

Ich habe dies gelöst, indem ich den Zweig in der Datei umbenannt habe .git/refs/remotes/origin/HEAD.

cemsbr
quelle
4
Zu was und von was?
Roel Van de Paar