Git meldet „detached HEAD“? Du stehst nicht auf einem Branch, sondern direkt auf einem Commit — Änderungen hier gehen ohne Gegenmaßnahme leicht verloren.
Aufwand:
ca. 15 Min.
Das Symptom
Nach einem git checkout mit einem Commit-Hash, einem Tag oder beim Stöbern in der
Historie warnt Git: You are in 'detached HEAD' state. Alles scheint zu funktionieren,
Commits lassen sich anlegen — aber ein späterer Wechsel auf einen Branch lässt die
gerade gemachte Arbeit scheinbar verschwinden.
Die „Layer 8“-Wahrheit
Git merkt sich mit HEAD, wo man gerade steht. Im Normalfall zeigt HEAD auf einen
Branch — einen benannten Zeiger, der bei jedem neuen Commit brav mitwandert. Beim
„detached HEAD“ ist dieser Umweg über den Branch gekappt: HEAD klebt direkt an einem
einzelnen Commit. Man kann dort alles tun, auch committen — nur hängen diese neuen
Commits an keinem benannten Ast. Wechselt man weg, ohne sie zu benennen, findet man
den Weg zu ihnen nicht mehr leicht zurück, und sie wirken verloren.
Deshalb ist der Zustand kein Defekt, sondern eine Falle für Unvorsichtige — und
zugleich ein nützliches Werkzeug, um alte Stände anzusehen. Die Regel ist einfach:
Will man nur schauen, wechselt man danach auf einen Branch zurück, fertig. Will man
arbeiten, legt man zuerst einen Branch an, der die Commits verankert. Und selbst wenn
scheinbar schon etwas verloren ging, ist es meist nicht weg — das Reflog erinnert
sich an fast jeden Commit und führt zurück zu ihm.
Die echte, verifizierte Lösung
1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:
1.
Den Zustand verstehen
Normalerweise zeigt HEAD auf einen Branch, und der Branch wandert mit jedem Commit mit. Beim „detached HEAD“ zeigt HEAD direkt auf einen einzelnen Commit — meist, weil man einen Commit-Hash oder ein Tag ausgecheckt hat. Neue Commits hängen dann an keinem Branch und drohen, vergessen zu werden.
2.
Nur ansehen? Dann einfach zurückwechseln
Wollte man den alten Stand nur betrachten, genügt es, auf den eigentlichen Branch zurückzuwechseln. Der lose Zustand verschwindet, ohne dass etwas passiert:
git switch main
3.
Änderungen retten, bevor man wechselt
Hat man im losen Zustand bereits committet und will diese Arbeit behalten, sie auf einem neuen Branch sichern. Solange man den Commit noch als aktuellen HEAD hat, ist das gefahrlos:
git switch -c neuer-branch
4.
Verlorene Commits über das Reflog finden
Ist man schon weggewechselt und die losen Commits scheinen weg, sind sie meist noch da. Das Reflog listet auch Commits ohne Branch auf; von dort lässt sich der Hash holen und auf einem Branch retten:
git reflog
5.
Bewusst mit dem Zustand umgehen
Der lose Zustand ist kein Fehler und manchmal gewollt — etwa um einen alten Stand zu prüfen. Wichtig ist nur, vor jeder ernsthaften Arbeit einen Branch anzulegen, damit die Commits einen Anker haben.
Häufige Fragen (FAQ)
?Sind meine Commits verloren, wenn ich im detached HEAD gearbeitet habe?
Nein, sie existieren noch – sie hängen nur an keinem Branch und sind deshalb unsichtbar. Mit git reflog finden Sie die Commit-Kennung wieder und können mit git branch rettung <kennung> nachträglich einen Branch darauf setzen. Git wirft solche Commits erst nach Wochen weg.
?Wie komme ich überhaupt in diesen Zustand?
Indem Sie direkt auf einen Commit, ein Tag oder einen entfernten Branch auschecken statt auf einen lokalen Branch. HEAD zeigt dann auf einen konkreten Commit statt auf einen mitwandernden Zeiger. Zum Ansehen ist das völlig in Ordnung – gefährlich wird es erst, wenn man dort arbeitet und den Zustand wieder verlässt.
Belege
Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.
git commit bricht mit „gpg failed to sign the data“ ab? Meist fehlt der passende Schlüssel, oder GPG kann im Terminal nicht nach der Passphrase fragen.
SWAnfängerfehlerYour local changes would be overwritten
git stoppt mit 'Your local changes would be overwritten by merge/checkout'? So rettest du deine Änderungen per commit oder stash, statt sie zu verlieren.