Ich habe dies heute zufällig getroffen, als ich versuchte, Git Garbage Collect auszuführen :
$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
Wie gehe ich damit um?
git
git-remote
git-fetch
git-gc
Ryan
quelle
quelle
master
einem anderen namens geändert habedevelop
. Tage bevor ich es wieder vondevelop
auf ändertemaster
und den alten Standardzweig löschtedevelop
, zeigte die Datei in meinem Arbeitsverzeichnis.git/refs/remotes/origin/HEAD
immer noch auf das,refs/remotes/origin/develop
was nicht mehr existiert. In dieser Situation hat das Entfernen der Datei funktioniert.git prune
hat für mich funktioniert, eine Möglichkeit, Daten zu löschen, die sich in Git angesammelt haben, auf die aber von nichts Nützlichem verwiesen wird.$ mv .git/refs/remotes/origin/HEAD /tmp
$ git gc
git prune
git gc
für mich gearbeitetDas Problem, auf das ich gestoßen bin (das ist das gleiche Problem, das @Stavarengo in diesem Kommentar oben erwähnt hat), ist, dass der Standard-Remote-Zweig (
develop
in meinem Fall) gelöscht wurde, aber immer noch in verwiesen wurde.git/refs/remotes/origin/HEAD
.Das Öffnen
.git/refs/remotes/origin/HEAD
in meinem Editor zeigte Folgendes:Ich habe es sorgfältig bearbeitet, um auf meinen neuen Standardzweig zu verweisen, und alles war gut:
Der Hinweis, der mich darauf hinwies, war, dass das Laufen
git prune
diesen Fehler zeigte:quelle
Nachdem ich Trentons Antwort gesehen hatte, sah ich meine an
.git/refs/remotes/origin/HEAD
und stellte fest, dass sie auch auf einen alten Zweig zeigte, der jetzt gelöscht ist.Aber anstatt die Datei selbst zu bearbeiten, habe ich Ryans Lösung ausprobiert:
Es stellte die Datei automatisch auf den neuen Zweig ein und
git gc
funktionierte danach einwandfrei.quelle
git remote set-head $REMOTE --auto
In meinem Fall ist $ REMOTE der Remote-Alias und nicht der Standard- "Ursprung", da ich mehrere Fernbedienungen eingerichtet habe.Ich dachte, die Lösung wäre die folgende, da dies zu funktionieren schien, aber es stellte sich heraus, dass das Problem nicht wirklich gelöst wurde.
quelle
git prune
(wie in der ersten Befehlsausgabe empfohlen), sodass ich nicht genau sagen kann, was mir geholfen hat - erstens, zweitens oder beides.git remote set-head origin --auto
Ich habe meine refs / remotes / origin / HEAD-Dateigit prune
error: Multiple remote HEAD branches. Please choose one explicitly
und musste verwendengit remote set-head origin mybranch
(während der Zweig 'mybranch' ausgecheckt war), um den Fehler zu beheben.Sieht so aus, als ob Ihre symbolischen Verweise möglicherweise beschädigt sind ... Versuchen Sie, sie wie folgt durch Ihren Standardzweig zu ersetzen: Mein Standardzweig ist beispielsweise master
Das sollte es beheben.
quelle
Wenn Sie Git-Arbeitsbäume verwenden, stellen Sie sicher, dass Sie a
vor dem Laufen
Ich hatte einen beschädigten Arbeitsbaum und dies schien den Trick zu tun, nachdem ich den beschädigten Arbeitsbaum entfernt hatte.
git prune
an sich schien nicht zu funktionieren.quelle
Die Ursache dafür war für mich die Arbeit in einem komprimierten Ordner unter Windows. Wenn der Ordner dekomprimiert wurde, wurden die Pack-Dateien beschädigt, wodurch andere seltsame Probleme auftraten, z. B. das Nicht-Bereinigen nicht vorhandener Zweige.
Die einzige Lösung bestand darin, das Arbeitsverzeichnis zu löschen und die Repo-Fernbedienung (en) erneut zu klonen. Zum Glück konnte ich immer noch Updates pushen und ziehen, um sicherzustellen, dass nichts verloren ging. Jetzt ist alles in Ordnung.
quelle