Antworten:
Ich verstehe die Konsequenzen nicht, aber wie in diesem Thread vorgeschlagen , habe ich es gerade getan, als ich darauf gestoßen bin
$ mv .git/refs/remotes/origin/HEAD /tmp
(für alle Fälle aufbewahren) und dann
$ git gc
arbeitete ohne sich zu beschweren; Ich habe keine Probleme gehabt.
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 gearbeitet
Das 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:
ref: refs/remotes/origin/develop
Ich habe es sorgfältig bearbeitet, um auf meinen neuen Standardzweig zu verweisen, und alles war gut:
ref: refs/remotes/origin/master
Der Hinweis, der mich darauf hinwies, war, dass das Laufen git prune
diesen Fehler zeigte:
> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
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:
git remote set-head origin --auto
Es stellte die Datei automatisch auf den neuen Zweig ein und git gc
funktionierte danach einwandfrei.
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.
git remote set-head origin --auto
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-Datei git prune
error: Multiple remote HEAD branches. Please choose one explicitly
und musste verwenden git 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
$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc
Das sollte es beheben.
Wenn Sie Git-Arbeitsbäume verwenden, stellen Sie sicher, dass Sie a
git worktree prune
vor dem Laufen
git gc
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.
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.
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.