webentwicklung-frage-antwort-db.com.de

Git 'tödlich: Keine solche ref: HEAD'

Eine seltsame Sache ist mit meinem Git-Repository passiert. Wenn ich versuche, etwas in tortoisegit Fenster festzulegen, erhalte ich alle Akten vom Projekt. Ich kann sie nicht zurücksetzen, wenn ich vom Server ziehe, erhalte ich fatal: No such ref: HEAD und fatal: Cannot lock the ref 'HEAD'. Alle meine lokalen Niederlassungen fehlen. Gibt es eine Möglichkeit, das Problem zu lösen?

Dies ist nicht erstmal begehen oder so. Dieses Ding passierte plötzlich.

BEARBEITEN:

git branch -a sagt: Failed to resolve HEAD as a valid ref

git status druckt alle als neue Datei markierten Projektdateien.

Ich habe den Namen des Repository-Ordners für eine Weile geändert, und als ich ihn zurück änderte, stimmten die Dinge nicht.

45
szaman

Sie haben Ihr HEAD verloren, müssen es also neu erstellen. Am einfachsten ist dies.

echo ref: refs/heads/master >.git/HEAD

Jetzt sollten Sie in der Lage sein, andere git-Befehle auszuführen und zu sehen, wo Sie sich gerade befinden.

(Obwohl Sie theoretisch versuchen könnten, git symbolic-ref HEAD refs/heads/master neuere git versionen erkennen kein .git als Git-Repository, es sei denn, es enthält bereits ein HEAD, so dass dies nicht funktioniert, um ein neues zu erstellen.)

67
CB Bailey

HEAD ist normalerweise ein Verweis auf einen bestimmten Zweig; In Ihrem Fall scheinen die Verzweigungszeiger verschwunden zu sein, sodass die Referenz HEAD nicht aufgelöst werden kann.

Mit git fsck --lost-found Können Sie den Objekt-Cache nach nicht erreichbaren Objekten durchsuchen. Insbesondere interessieren Sie sich für Commits, die dann unter .git/lost-found/commit/ zu finden sind. Dies sind Zeiger auf Ihre Zweige. Sie müssen dann nur herausfinden, welcher Zweig welcher ist, und mit git branch neue Verweise erstellen.

6
Simon Richter

Ich denke diese Antwort ist vielleicht hilfreich für jemanden. Ich habe dieses Problem fast gelöst. Zuerst habe ich, wie Charles Bailey schrieb, Gebrauch gemacht

echo ref: refs/heads/master >.git/HEAD

Dann wurde mein Zweig zum Meister. Ich habe Änderungen vorgenommen und konnte zu meiner Hauptniederlassung wechseln. Das Problem war, dass ich keine meiner lokalen Niederlassungen nutzen konnte. Insbesondere wollte ich an Zweig 812 arbeiten. Also habe ich das letzte Commit für Zweig 812 gefunden (Nachricht erstellen, wenn Commit sehr hilfreich ist;)) und bin zu diesem gewechselt. Als nächstes habe ich den Zweig 812 basierend auf dem erstellt, zu dem ich gewechselt habe. Leider fehlten einige Dateien. Zum Glück hatte ich sie auf dem kaputten Repo, das ich vor 'Echo' kopiert habe

6
szaman

Für mich bestand das Problem darin, dass unter Mac OS X entweder das Flag 'uchg' oder 'uappnd' gesetzt war und einige Git-Dateien unabhängig von den Dauerwellen gesperrt waren. Ich habe die Chflags so zurückgesetzt und es hat es für mich gelöst:

Sudo chflags -R 0000 .