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?
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?
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
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
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
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
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