Подтвердить что ты не робот

Как я намеренно отсоединяю HEAD в git?

Если я делаю git checkout HEAD^, я получаю следующее:

$ git checkout HEAD^
Note: checking out 'HEAD^'.

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

Ветеран git пользователи, вероятно, очень хорошо знакомы с этим. Но если я делаю git checkout HEAD, ничего не происходит:

$ git checkout HEAD
$

Я хотел бы создать состояние "отдельно стоящее HEAD" для фиксации во главе моей текущей ветки. Как это сделать?

4b9b3361

Ответ 1

Начиная с git 1.7.5 (апрель 2011 г.), вы можете использовать команду git checkout --detach.

Смотрите коммит 326696

checkout: ввести синоним --detach для " git checkout foo^{commit} "

Например, можно использовать это при временном слиянии, чтобы проверить, что две темы хорошо работают вместе.


Коммит 8ced1aa (git 1.7.11.3, июль 2012) запрещает --detach на неродившейся ветке, так что это не даст сбой на нулевом HEAD:

git checkout --orphan foo
git checkout --detach
git symbolic-ref HEAD

Только предстоящий git 1.8.4.2 или 1.8.5 (4 квартал 2013 г.) разъясняет синтаксис. Смотрите коммит 26776c9:

Разделите этот случай на две синтаксические формы, имитируя способ, которым раздел ОПИСАНИЕ показывает это использование.
Также уточните текст, который объясняет синтаксис, чтобы дать название коммиту для отключения HEAD чтобы уточнить.

'git checkout' [--detach] <commit>::

Подготовьтесь к работе поверх <commit>, отсоединив от него HEAD (см. Раздел "DETACHED HEAD"), и обновив индекс и дерево, которое будет записано в коммите, а также в локальных модификациях.

  1. Когда аргумент <commit> является именем ветки, опция --detach может использоваться для отсоединения HEAD в конце ветки (git checkout <branch> будет проверять эту ветку без отключения HEAD).

  2. Пропуск <branch> отсоединяет HEAD в конце текущей ветки.

Последний пункт - именно то, что вы хотите сделать для своей текущей ветки:

git checkout --detach

Ответ 2

Эта команда создает состояние отдельного заголовка из любого заданного имени ветки (в данном случае master):

git checkout master^0

Проверка хэшей фиксации также автоматически создает отдельное состояние заголовка, нет необходимости в ^0:

git checkout 823112f444cb4aa70032feea6e8e5eb79d0e1ed0

И, конечно же, более короткие хэши:

git checkout 823112f