Layer 8Ehrlicher Tech-Support
SoftwareSchweregrad: Lästigdetached HEAD

Git: detached HEAD state

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

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWLästiggpg failed to sign the data

Git-Commit scheitert an der GPG-Signatur

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: local changes would be overwritten by merge

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.

SWLästigCONFLICT

Git: Merge-Konflikt (CONFLICT)

Git meldet einen Konflikt beim Zusammenführen? Beide Seiten haben dieselbe Stelle geändert. Git kann nicht raten, welche gilt — das entscheidest du.

SWLästigUnsupportedClassVersionError

Java: UnsupportedClassVersionError

Das Programm wurde mit einem neueren Java kompiliert, als es ausführt? Diese Meldung nennt sogar die Versionsnummern — man muss sie nur übersetzen.