fatal: schlechtes Objekt xxx

Lesezeit: 6 Minuten

Benutzer-Avatar
James A. Anderson

Ich habe versucht, zu einem früheren Git-Commit zurückzukehren mit:

git revert xxx

Als Antwort bekomme ich jetzt diesen Fehler:

fatal: bad object xxx

Was mache ich falsch? Wie behebe ich das?

  • Hast du es versucht git reset --HARD commitId?

    – Luis E.

    6. August 2012 um 19:02 Uhr

  • @LuizE. Es hat bei mir nicht funktioniert.

    – James A. Anderson

    6. August 2012 um 19:58 Uhr

  • Versuchen git gc bevor Sie den Befehl ausführen

    – Luis E.

    6. August 2012 um 20:05 Uhr

  • @LuizE. Es scheint nicht zu helfen

    – James A. Anderson

    6. August 2012 um 20:58 Uhr


  • Ich möchte zukünftigen Lesern helfen, indem ich darauf hinweise, dass Sie sich möglicherweise im falschen Verzeichnis/Repo befinden, wenn Sie diesen Fehler erhalten. Ich habe versucht, das Tag oder den Zweig eines Submodul-Commits zu erhalten, ohne in das Unterverzeichnis des Submoduls abzusteigen. Und ich habe den Commit-Hash von Git Diff in das Super-Repo eingefügt, also „MUSS es existieren!“

    – Cardiff-Weltraummann

    14. Januar 2020 um 21:38 Uhr

Ich kenne den genauen Grund nicht, warum das passiert. Bei mir liegt es daran, dass ich vergesse, das gesamte Repository auf mein lokales zu ziehen. Ich habe 2 oder mehr Pfade und jeder Pfad zieht aus einem anderen Zweig

/path/branch_a/ -> pulled from branch A
/path/branch_b/ -> pulled from branch B

Auf Zweig A habe ich ein paar Änderungen vorgenommen und wie gewohnt übergeben. Ich möchte dieses Commit (zum Beispiel ist die Commit-ID abcdef123) erscheint auf Zweig B, also verwende ich

$ cd /path/branch_b/
$ git branch
  master
  branch_a
* branch_b 

$ git cherry-pick abcdef123

Das gibt mir diese Art von Fehler. Also muss ich das gesamte Repository abrufen, bevor ich diesen Commit erhalte

$ git pull
remote: Counting objects: 257, done.
remote: Compressing objects: 100% (58/58), done.
remote: Total 216 (delta 187), reused 186 (delta 158)
Receiving objects: 100% (216/216), 53.13 KiB | 43 KiB/s, done.
Resolving deltas: 100% (187/187), completed with 38 local objects.
From github.com:username/my_repo
   abcdef3..80c0d68  branch_a    -> origin/branch_a
Already up-to-date.

$ git cherry-pick abcdef123 
[branch_b ccddeef] Some commit message
1 file changed, 1 insertion(+), 1 deletion(-)

  • Diese Antwort zeigt einen häufigen Fehler bei der Verwendung desselben Repos in verschiedenen Ordnern mit unterschiedlichen Zweigen. Ein +1 für mich.

    – Carlosayam

    28. Januar 2014 um 11:38 Uhr

Benutzer-Avatar
Torek

[Edit 1, 19 Nov 2016] Während dies manchmal auf eine Beschädigung des Repositorys hindeutet, tritt es unter Windows auf, wenn ein Befehl – ​​normalerweise ein anderes Git in einer anderen Aufgabe – interne Dateien offen und gesperrt hält. In diesem Fall sollte das Beenden der anderen Aufgabe das Problem beheben. Die ursprüngliche Antwort ist unten.

[Edit 2, 6 May 2020] Vermuten xxx oben ähnelt, zB, b34789c0b0d3b137f0bb516b417bd8d75e0cb305 (eine rohe Hash-ID). Wenn Sie dies durch Ausschneiden und Einfügen erhalten haben, stellen Sie sicher, dass es für ist Dies Repository (es ist einfach, eine Hash-ID aus einem anderen Repository abzurufen, ohne es zu merken, insbesondere wenn Sie mehrere Fenster geöffnet haben). Wenn Sie es selbst neu eingegeben haben, vergewissern Sie sich, dass es keine Tippfehler gibt. Wenn es sich um Submodule handelt, stellen Sie sicher, dass das Submodul aktuell ist. Siehe die Kommentare zu der Frage und einige der Antworten, einschließlich dieser.


bad object mit einer Hexadezimalzahl bedeutet tendenziell, dass ein Tag eine ungültige Referenznummer enthält, kann aber auch für einige andere seltsame Fälle auftreten. Wenn ich zum Beispiel Folgendes mache:

$ git tag foo
$ vi .git/refs/tags/foo

und ändere das letzte Zeichen (in diesem Fall von 6 auf 5) und schreibe das aus:

$ git log foo
fatal: bad object foo

Was genau ist die xxx hier und wo kommt es her?

  • OK, es ist also ein SHA1 mit 40 Zeichen. Sind Sie sicher, dass es sich um einen korrekten, gültigen SHA1 handelt? Wo ist es hergekommen?

    – Torek

    6. August 2012 um 20:14 Uhr

  • Ich habe es kopiert und eingefügt git log

    – James A. Anderson

    6. August 2012 um 20:38 Uhr

  • Hm, wenn es sich um eine saubere Paste aus der Ausgabe von “git log” handelt, ist das ziemlich seltsam! Können Sie dieselbe ID ohne Fehler “git zeigen”?

    – Torek

    6. August 2012 um 20:42 Uhr

  • Ich habe den gleichen Fehler. Wie in dieser Frage und den obigen Kommentaren beschrieben. Grund war, dass ich dasselbe Projekt an verschiedenen Orten geöffnet habe. Das Schließen aller Bash und das erneute Öffnen löste das Problem

    – SajithK

    23. Oktober 2015 um 8:44 Uhr

  • In meinem Fall musste ich laufen git fetch um die Remote-Commits auch lokal zu haben.

    – parisssss

    26. Juni 2020 um 11:46 Uhr

In meinem Fall habe ich Rosinen aus einem anderen Zweig gepflückt, den ich nicht gezogen habe, aber ich habe versucht, die IDs von Commit von GH zu kopieren (ich habe das nicht auf meinem lokalen, wo ich Rosinen gepflückt habe).

Hoffe es hilft ;-D

  • Ich habe das aus dem gleichen Grund erlebt, aber etwas, das auch zu dem Problem beigetragen hat, war, dass der Commit, den ich zu picken versucht habe, gequetscht wurde, als er in den Hauptzweig gemergt wurde, also hatte sich der SHA1 des ursprünglichen Commit geändert. Nachdem ich herausgefunden hatte, was der neue SHA1 war, der die gleichen Änderungen darstellte, nach denen ich suchte, konnte ich diesen neuen SHA1 ganz gut auswählen.

    – Gabe

    10. November 2017 um 20:32 Uhr

Benutzer-Avatar
jorfus

Ich bin gerade auf denselben Fehler gestoßen (schlechtes Objekt [hash]) beim Versuch, aus einem Branch zusammenzuführen, von dem mein Client nichts wusste. (Ähnlich wie im Fall von PrzeoR, aber anstatt einen Zug zu benötigen, musste ich ihn holen)

In meinem Fall musste ich git fetch ausführen, um meinen Client erneut mit dem Status des Servers zu synchronisieren. Poste dies hier, falls jemand diesen Thread auf die gleiche Weise wie ich erreicht und von dieser Erkenntnis profitieren könnte.

git pull
git cherry-pick [hash]
fatal: bad object [hash]
git fetch
remote: Counting objects: 8, done. (etc.)
From github.com:repo/branch
 * [new branch] branchname

git cherry-pick [hash]
[success]

git fetch --all

Der Befehl git fetch lädt Commits, Dateien und Refs aus einem Remote-Repository in Ihr lokales Repository herunter.

  • Ups – Problem nicht gelöst.

    – R Claven

    2. Mai um 17:38 Uhr


git ziehen

ODER

git holt den Ursprung

Grund: Wenn die Commit-ID, die Sie zu picken versuchen, in Ihrem lokalen Git nicht verfügbar ist, besteht die Möglichkeit dieses Fehlers.

Ein tun git pull wird das beheben. Wenn dies nicht behoben wurde, bitten Sie die Person, die die Commit-ID geteilt hat, die Änderung zu pushen origin und mache ein git pull

  • Ups – Problem nicht gelöst.

    – R Claven

    2. Mai um 17:38 Uhr


Benutzer-Avatar
Ciro Santilli Путлер Капут 六四事

Objekte, die nicht im Repository vorhanden sind, geben diese Fehlermeldung aus

Z.B:

 git init
 touch a
 git add a
 git commit -m 0
 # This object is not in the repository.
 git show 1111111111111111111111111111111111111111

Was das Problem verursacht, ist ohne ein reproduzierbares Minimalbeispiel schwer zu sagen.

Submodul-Probleme haben mir diesen Fehler einmal gegeben.

  • Ich habe es bekommen, indem ich eine Revision eingeschweißt, sie aus der Ferne überschrieben und dann versucht habe, dieses Paket zu installieren (es ist fehlgeschlagen git rev-list).

    – Brett Zamir

    28. Februar 2017 um 11:09 Uhr

  • Darauf stieß ich, nachdem ich herausgefunden hatte, dass ein Bamboo-Job, den ich verwalten musste, Folgendes verwendete: Verwenden Sie flache Klone Fetches the shallowest commit history possible. Do not use if your build depends on full repository history.

    – jxramos

    23. Oktober 2020 um 3:56 Uhr

1310810cookie-checkfatal: schlechtes Objekt xxx

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy