Von Gast (nicht überprüft) , 29 April 2026

Einführung

Normalerweise zeigt HEAD auf eine Branch-Ref, die wiederum auf einen Commit zeigt. In Detached HEAD zeigt HEAD direkt auf einen Commit. Detached HEAD ist nicht kaputt; es ist ein bewusster Modus, der zum Inspizieren der Historie nützlich und zum gedankenlosen Committen gefährlich ist.

Wie man dorthin kommt

git checkout v1.2.3
git switch --detach v1.2.3
git checkout HEAD~5
git checkout origin/main      # Remote-Tracking ist quasi-readonly

Jeder dieser Befehle setzt HEAD direkt auf einen Commit statt auf einen Branch.

Inspizieren

cat .git/HEAD
# a1b2c3d4...   (roher SHA, nicht "ref: ...")
git status
# HEAD detached at v1.2.3

Warum es existiert

  • Ein altes Release inspizieren, ohne einen Branch zu beeinflussen.
  • Bisecten (git bisect verwendet Detached HEAD).
  • Ein schnelles Experiment bauen, das Sie verwerfen können.
  • Auf einem Tag operieren, der unbeweglich bleiben soll.

In Detached HEAD committen

Sie können in Detached HEAD committen, und das Commit-Objekt wird normal erzeugt. Der Haken: Kein Branch zeigt darauf. Wechseln Sie weg und der Commit wird unerreichbar.

git switch --detach v1.2.3
echo fix > patch.txt
git add patch.txt
git commit -m "Quick fix"
git switch main             # der neue Commit ist jetzt verwaist

Verankern Sie ihn vor dem Wechsel:

git switch -c hotfix/1.2.4

Wiederherstellung nach versehentlichem Detach

Wenn Sie schon weggewechselt haben, hat das Reflog den Commit:

git reflog
# a1b2c3d HEAD@{1}: commit: Quick fix
git switch -c hotfix/1.2.4 a1b2c3d

Wenn Detached HEAD nicht detached ist

Bare-Repositories haben oft HEAD als symbolische Ref auf refs/heads/main, auch wenn es keinen Working Tree gibt. Submodules checken absichtlich Detached HEAD auf dem aufgezeichneten Commit aus; das ist normal.

Warnungen konfigurieren

git config --global advice.detachedHead true   # Standard: Hinweise zeigen

Anfänger sollten dies eingeschaltet lassen; der Warntext erklärt genau, wie man wiederherstellt.

Sicher im detached Modus arbeiten

Wenn Sie absichtlich experimentieren wollen, ohne einen Branch zu beeinflussen, ist Detached HEAD das richtige Werkzeug. Der Trick ist, wichtige Arbeit vor dem Wegwechseln zu verankern. Ein verlässliches Muster:

git switch --detach v1.2.3
# ... experimentieren, committen ...
git tag tmp/experiment           # Lesezeichen
git switch main
# später
git switch -c rescued tmp/experiment
git tag -d tmp/experiment

Der tmp/-Tag-Namespace macht offensichtlich, dass dies wegwerfbare Anker sind. Manche Teams reservieren für diesen Zweck ein ganzes Präfix und lassen CI es ignorieren.

Häufige Fehler

Die Warnung als beängstigenden Fehler behandeln und in Panik geraten. Sie ist informativ. Bedeutende Arbeit in Detached HEAD verrichten und dann git switch main ausführen, ohne zuerst einen Branch zu erstellen; per Reflog wiederherstellen, aber besser zuerst verankern. Detached HEAD mit einem korrupten Repository verwechseln; nichts ist korrupt, Ihnen fehlt nur ein Branch-Label. Schließlich: Im detached Modus pushen: git push braucht an beiden Enden einen Branch. Erstellen Sie entweder einen lokalen Branch und pushen Sie ihn, oder verwenden Sie git push origin HEAD:refs/heads/new.