Testen mit detached und normalem HEAD
In den vorherigen Schritten haben wir gelernt, dass HEAD
normalerweise auf eine Branch wie master
zeigt. Dies ist der "normale" Zustand. Allerdings kann HEAD
auch direkt auf einen bestimmten Commit zeigen. Dies wird als "detached HEAD"-Zustand bezeichnet.
Lassen Sie uns sehen, wie ein detached HEAD
aussieht. Zunächst benötigen wir die Commit-ID unseres ersten Commits. Wir können diese mit git log --oneline
erhalten:
cd ~/project/my-time-machine
git log --oneline
Sie sollten eine Ausgabe ähnlich der folgenden sehen (Ihre Commit-ID wird anders sein):
a1b2c3d (HEAD -> master) Send a message to the future
Die ersten sieben Zeichen (a1b2c3d
in diesem Beispiel) sind die kurze Commit-ID. Kopieren Sie diese ID.
Jetzt verschieben wir HEAD
, sodass es direkt auf diesen Commit zeigt, indem wir git checkout
verwenden:
git checkout <your_commit_id>
Ersetzen Sie <your_commit_id>
durch die tatsächliche kurze Commit-ID, die Sie aus git log --oneline
kopiert haben. Beispiel:
git checkout a1b2c3d
Sie werden eine Ausgabe sehen, die darauf hinweist, dass Sie sich in einem detached HEAD-Zustand befinden:
Note: switching to 'a1b2c3d'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or, if you want to make this branch stay, use:
git branch <new-branch-name> <your_commit_id>
Switched to commit a1b2c3d
Jetzt überprüfen wir erneut den Status:
git status
Die Ausgabe wird deutlich zeigen, dass Sie sich in einem detached HEAD-Zustand befinden:
HEAD is now at a1b2c3d Send a message to the future
nothing to commit, working tree clean
Und wenn wir git symbolic-ref HEAD
verwenden, wird es einen Fehler anzeigen, da HEAD
keine symbolische Referenz auf eine Branch ist:
git symbolic-ref HEAD
Dieser Befehl wird wahrscheinlich einen Fehler ausgeben oder keine Ausgabe liefern, was darauf hinweist, dass HEAD
keine symbolische Referenz ist.
Um in den normalen Zustand zurückzukehren, in dem HEAD
auf die master
-Branch zeigt, können wir die master
-Branch auschecken:
git checkout master
Sie sollten eine Ausgabe wie die folgende sehen:
Switched to branch 'master'
Jetzt wird git status
anzeigen, dass Sie wieder auf der master
-Branch sind:
git status
Ausgabe:
On branch master
nothing to commit, working tree clean
Und git symbolic-ref HEAD
wird wieder die symbolische Referenz anzeigen:
git symbolic-ref HEAD
Ausgabe:
refs/heads/master
Das Verständnis des Unterschieds zwischen einem angeschlossenen HEAD
(das auf eine Branch zeigt) und einem detached HEAD
(das direkt auf einen Commit zeigt) ist wichtig für die Navigation in der Projektgeschichte und die Durchführung fortgeschrittener Git-Operationen.