Git: Як повернутись із стану "відокремленої ГОЛА"


218

Якщо ви хочете оформити філію:

git checkout 760ac7e

наприклад b9ac70b, як можна повернутися до останньої відомої голови, b9ac70bне знаючи її SHA1?

Відповіді:


332

Якщо ви пам'ятаєте, яку галузь раніше перевіряли (наприклад master), ви могли просто

git checkout master

вийти з відокремленого стану голови .

Взагалі кажучи: git checkout <branchname>позбавить вас від цього.

Якщо ви не пам’ятаєте прізвища гілки, спробуйте

git checkout -

Це також намагається перевірити вашу останню перевірену гілку.


17
git checkout -- вбивча особливість!
dimpiax

1
Якщо ви цього не зробите git checkout -b new_branch_name, ви втрачаєте зобов’язання, зроблені, перебуваючи у відірваному стані HEAD?
jocassid

2
@jocassid Так. Вони присутні деякий час, але коли git gcвони запущені, вони видаляються назавжди. Ви можете спостерігати за ними git reflog, поки вони все ще є.
eckes

чи не втратите ви жодних комітетів / змін, внесених у відокремлену HEAD, якщо це зробите? Це не кращий спосіб? stackoverflow.com/a/61489179/13087176
напідпитку boopenstein

@tipsyboopenstein правильний. jocassid вже говорив про це: stackoverflow.com/questions/11801071 / ...
Екес

16

Використовуйте git reflogдля пошуку хешів раніше перевірених комітетів.

Команда швидкого доступу, щоб дістатися до вашої останньої перевіреної гілки (не впевнений, чи правильно це працює з відокремленою HEAD та проміжними комісіями), є git checkout -


4

У мене був цей крайній випадок, коли я перевірив попередню версію коду, в якій структура моєї файлової директорії відрізнялася:

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'

У такому випадку вам може знадобитися --force (коли ви знаєте, що повернутися до початкової гілки та скасувати зміни - це безпечно).

git checkout master не працює:

$ 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(або git checkout master -f) працювали:

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

Можливо, ви зробили деякі нові зобов’язання в detached HEADдержаві. Я вірю, якщо ви зробите так, як радять інші відповіді:

git checkout master
# or
git checkout -

тоді ви можете втратити свої зобов'язання !! Натомість ви можете зробити це:

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

а потім об'єднайтеся commits-from-detached-headв будь-яку галузь, яку ви хочете, щоб ви не втратили комітети.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.