Git: Wie man aus dem Zustand 'losgelöster KOPF' zurückkehrt


217

Wenn man eine Filiale auschecken würde:

git checkout 760ac7e

von zB b9ac70bwie kann man zum letzten bekannten Kopf zurückkehren, b9ac70bohne dessen SHA1 zu kennen?

Antworten:


331

Wenn Sie sich erinnern, welcher Zweig zuvor ausgecheckt wurde (z. B. master), können Sie dies einfach tun

git checkout master

aus dem losgelösten HEAD- Zustand herauskommen .

Generell: git checkout <branchname>bringt Sie da raus.

Wenn Sie sich nicht an den Namen des letzten Zweigs erinnern, versuchen Sie es

git checkout -

Dadurch wird auch versucht, Ihren zuletzt ausgecheckten Zweig auszuchecken.


17
git checkout -- Killer-Feature!
Dimpiax

1
Wenn Sie dies nicht tun git checkout -b new_branch_name, verlieren Sie die im getrennten HEAD-Status vorgenommenen Commits?
Jocassid

2
@jocassid Ja, das tust du. Sie sind für eine Weile vorhanden, aber wenn git gcsie ausgeführt werden, werden sie für immer entfernt. Sie können sie beobachten, git reflogsolange sie noch da sind.
eckes

Verlieren Sie dabei keine Commits / Änderungen, die Sie in losgelöstem HEAD vorgenommen haben? Ist das nicht ein besserer Weg? stackoverflow.com/a/61489179/13087176
beschwipster boopenstein

@tipsyboopenstein richtig. jocassid hat dies bereits erwähnt: stackoverflow.com/questions/11801071/…
eckes

16

Verwenden git reflogSie diese Option, um die Hashes zuvor ausgecheckter Commits zu finden.

Ein Verknüpfungsbefehl, um zu Ihrem zuletzt ausgecheckten Zweig zu gelangen (nicht sicher, ob dies mit getrenntem HEAD und Zwischen-Commits korrekt funktioniert), lautet git checkout -


4

Ich hatte diesen Randfall, in dem ich eine frühere Version des Codes ausgecheckt habe, in der meine Dateiverzeichnisstruktur anders war:

git checkout 1.87.1                                    
warning: unable to unlink web/sites/default/default.settings.php: Permission denied
... other warnings ...
Note: checking out '1.87.1'.

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 performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. 
Example:

  git checkout -b <new-branch-name>

HEAD is now at 50a7153d7... Merge branch 'hotfix/1.87.1'

In einem solchen Fall müssen Sie möglicherweise --force verwenden (wenn Sie wissen, dass es sicher ist, zum ursprünglichen Zweig zurückzukehren und Änderungen zu verwerfen).

git checkout master funktioniert nicht:

$ git checkout master
error: The following untracked working tree files would be overwritten by checkout:
web/sites/default/default.settings.php
... other files ...

git checkout master --force(oder git checkout master -f) gearbeitet:

git checkout master -f
Previous HEAD position was 50a7153d7... Merge branch 'hotfix/1.87.1'
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

1

Möglicherweise haben Sie im detached HEADBundesstaat einige neue Verpflichtungen eingegangen. Ich glaube, wenn Sie andere Antworten empfehlen:

git checkout master
# or
git checkout -

dann können Sie Ihre Commits verlieren !! Stattdessen möchten Sie möglicherweise Folgendes tun:

# you are currently in detached HEAD state
git checkout -b commits-from-detached-head

und dann commits-from-detached-headin einen beliebigen Zweig einbinden, damit Sie die Commits nicht verlieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.