Git: Cum să reveniți din starea ‘detached HEAD’ (Programare, Git)

James Raitsev a intrebat.

Dacă cineva ar verifica o ramură:

git checkout 760ac7e

de ex. b9ac70b, , cum se poate reveni la ultimul head cunoscut b9ac70b fără a-i cunoaște SHA1?

4 răspunsuri
eckes

Dacă vă amintiți ce ramură a fost verificată înainte (de ex. master), ați putea pur și simplu

git checkout master

pentru a ieși din detașat HEAD de la starea detașat.

În general: git checkout <branchname> te va scoate din această stare.

Dacă nu vă amintiți numele ultimei ramuri, încercați

git checkout -

Aceasta încearcă, de asemenea, să verifice ultima ramură verificată.

Comentarii

    33

  • git checkout - – caracteristică mortală! –  > Por dimpiax.
  • Dacă nu faceți un git checkout -b new_branch_name pierzi comenzile făcute în timp ce erai în starea HEAD detașată? –  > Por jocassid.
  • @jocassid Da, așa este. Acestea sunt prezente pentru o perioadă de timp, dar când git gc este rulat, sunt eliminate pentru totdeauna. Le puteți urmări cu git reflog atâta timp cât ele sunt încă prezente. –  > Por eckes.
  • nu veți pierde orice comenzi/modificări făcute în detached HEAD dacă faceți acest lucru? Nu este aceasta o modalitate mai bună? stackoverflow.com/a/61489179/13087176 – user13087176
  • @tipsyboopenstein corect. jocassid a menționat deja acest lucru: stackoverflow.com/questions/11801071/… –  > Por eckes.
knittl

Utilizați git reflog pentru a găsi hașurile comenzilor verificate anterior.

O comandă rapidă pentru a ajunge la ultima ramură verificată (nu sunt sigur că funcționează corect cu HEAD detașat și cu comenzi intermediare, totuși) este git checkout -

mcaleaa

Am avut acest caz limită, în care am verificat o versiune anterioară a codului în care structura directoarelor mele de fișiere era diferită:

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'

Într-un astfel de caz, este posibil să fie nevoie să folosiți –force (atunci când știți că întoarcerea la ramura originală și renunțarea la modificări este un lucru sigur).

git checkout master nu a funcționat:

$ 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 (sau git checkout master -f) a funcționat:

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

user13087176

Este posibil să fi făcut niște comenzi noi în ramura detached HEAD stat. Cred că dacă faci așa cum te sfătuiesc alte răspunsuri:

git checkout master
# or
git checkout -

atunci s-ar putea să vă pierdeți comenzile!!! În schimb, este posibil să doriți să faceți acest lucru:

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

și apoi să fuzionezi commits-from-detached-head în orice ramură doriți, astfel încât să nu vă pierdeți comenzile.

Tags: