Wenn Sie ein Commit auschecken, das nicht der Name eines Ihrer Zweige ist, erhalten Sie einen getrennten HEAD. Ein SHA1, der die Spitze eines Zweigs darstellt, ergibt immer noch einen abgetrennten KOPF. Nur eine Kasse eines lokalen Zweignamen vermeidet diesen Modus.
Siehe Festschreiben mit einem abgetrennten KOPF
Wenn HEAD getrennt ist, funktionieren Commits wie gewohnt, außer dass kein benannter Zweig aktualisiert wird. (Sie können sich dies als anonymen Zweig vorstellen.)
Wenn Sie beispielsweise einen "Remote-Zweig" auschecken, ohne ihn zuerst zu verfolgen, erhalten Sie möglicherweise einen abgetrennten HEAD.
Siehe git: Zweig wechseln, ohne den Kopf abzunehmen
Mit Git 2.23 (August 2019) müssen Sie den verwirrenden git checkout
Befehl nicht mehr verwenden.
git switch
Sie können auch einen Zweig auschecken und einen abgetrennten KOPF erhalten, außer:
- Es gibt eine explizite
--detach
Option
So überprüfen Sie das Commit HEAD~3
für eine vorübergehende Überprüfung oder ein Experiment, ohne einen neuen Zweig zu erstellen:
git switch --detach HEAD~3
HEAD is now at 9fc9555312 Merge branch 'cc/shared-index-permbits'
- Ein Remote-Tracking-Zweig kann nicht versehentlich getrennt werden
Sehen:
C:\Users\vonc\arepo>git checkout origin/master
Note: switching to 'origin/master'.
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 without impacting any branches by switching back to a branch.
Vs. mit dem neuen git switch
Befehl:
C:\Users\vonc\arepo>git switch origin/master
fatal: a branch is expected, got remote branch 'origin/master'
Wenn Sie einen neuen lokalen Zweig erstellen möchten, der einen Remote-Zweig verfolgt:
git switch <branch>
Wenn <branch>
nicht gefunden wird, aber in genau einer Fernbedienung ein Tracking-Zweig <remote>
mit einem übereinstimmenden Namen vorhanden ist (nennen Sie ihn ), behandeln Sie ihn als äquivalent zu
git switch -c <branch> --track <remote>/<branch>
Kein Fehler mehr!
Kein unerwünschter losgelöster KOPF mehr!
branch-name@{n}
der n-ten vorherigen Position vonbranch-name
. Aber egal was passiert, irgendwann muss es eine gegeben habengit checkout <rev>
. Wenn das nicht klingelt, haben Sie wahrscheinlich das getan, was Will erwähnt hat - versuchtgit checkout <file>
und versehentlich eine Revision angegeben.