Git: могу ли я проверить фиксацию без отсоединения HEAD?
Из руководства Git:
git checkout [--detach] <commit> Подготовьтесь к работе поверх <commit> , путем отсоединения HEAD (см. раздел "DETACHED HEAD" ) и обновления индекс и файлы в рабочем дереве. Локальные модификации файлы в рабочем дереве сохраняются, так что результат работы дерево будет состоять из состояния, зафиксированного в фиксации плюс локальный модификаций.
Кажется, есть только один вариант: HEAD отсоединен.
Могу ли я указать параметр, который не позволяет отключить HEAD?
[Обновление 1]
Я задал аналогичный вопрос в комментарии в сообщении Вернуть Git repo в предыдущее коммит"
# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .
# Then commit. Be sure and write a good message describing what you just did
git commit
Мой вопрос к нему: @Jefromi, после "git checkout 0d1d7fc32.", Уже HEAD отдельностоящий? Тогда "git commit" ничего не может сделать с болтающимся HEAD.
чтобы проверить состояние из 0d1d7fc32 в текущем каталоге, но это оставляет голову, где она была. Это то же самое, что использовать что-то вроде gitcheckout other-branch path/to/file - это оставит вас на вашем текущую ветвь и просто проверить данный файл. В этом случае мы проверяя всю текущую директорию вместо одного файла, но все еще не меняя HEAD. - Jefromi
Итак, мы можем позволить HEAD не привязываться, добавив "."
[Обновление 2] Из ответов и комментариев, приведенных ниже, я думаю, что аккуратный:
git reset --hard
Но теперь мой вопрос:
Является ли метод Джефоми правильным?
git checkout 0d1d7fc32 .
git commit
См. приведенную выше ссылку для получения более подробной информации о его методе.
Ответы
Ответ 1
Если вы хотите проверить фиксацию, которая не является последней фиксацией какой-либо ветки, в принципе невозможно проверить это, в то же время имея HEAD
ссылку на ветку.
Вы можете создать или обновить ветвь, чтобы указать на эту конкретную фиксацию, как указано в комментариях, используя параметр git checkout
-b
(или -b
для перезаписи существующей ветки) или если вы уже находитесь на который вы хотите указать на конкретную фиксацию, вы можете обновить ее и проверить в то же время, используя git reset --hard <commit>
.
Ответ 2
Если вы хотите проверить заданный хеш фиксации без отсоединения от HEAD, вы можете назначить его новой ветке. Просто добавьте -b <newbranch>
в конец вашей команды git checkout
(заменив <newbranch>
на имя вашей новой ветки)
git checkout <hash> -b mynewbranch
Ответ 3
Если вы хотите проверить в отраслевом режиме, и знаете, что он уже сидит на кончике ветки, вам нужно сначала определить имя ветки (используя "git show --decorate", ):
git show --decorate <commit>
Например, "git show --decorate 85d3204" на моем компьютере прямо сейчас говорит мне, что "85d3204" находится на кончике "MY-BRANCH":
commit 85d3204cd5c081abce3329729691fd9e056dcc19 (MY-BRANCH)
Итак, чтобы проверить это фиксацию в ветки-режиме (и предположим, что я хочу продолжить разработку на "MY-BRANCH" ), я бы сделал следующее:
git checkout MY-BRANCH