Из руководства 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
См. приведенную выше ссылку для получения более подробной информации о его методе.