Когда вы извлекаете имя прямого коммита (используя хэш SHA-1 объекта фиксации) вместо того, чтобы извлекать имя ветки, вы получаете «отсоединенный HEAD». HEAD - это «ссылка», которая отслеживает то, что в данный момент проверено. Он отключается, когда вы непосредственно извлекаете коммит вместо ветви (он не присоединен ни к одной ветви). При отсоединении заголовка хранилища ветки не обновляются. Вы можете думать о состоянии отдельного заголовка так, как если бы у вас была анонимная ветка.
Чтобы заново подключить HEAD хранилища, вам нужно сохранить текущий HEAD как ветвь и проверить эту ветвь:
Чтобы сохранить текущий заголовок в новой ветви, сделайте следующее:
git branch <new-branch-name>
Чтобы перезаписать существующую ветку , необходимо использовать --force
:
git branch --force <existing-branch-name>
Затем снова присоедините HEAD вашего репозитория, проверив новую / обновленную ветку:
git checkout <branch-name>
(где <branch-name>
совпадает с <new-branch-name>
или <existing-branch-name>
, в зависимости от того, какую из двух вышеуказанных команд вы использовали)
Эта последовательность (git branch
для указания точки на текущую фиксацию HEAD, затем git checkout
этой обновленной ветви) будет пересылать любой незафиксированный контент, который может быть в вашем рабочем индексе и / или дереве.
В будущем, если вы хотите «откатить» текущую ветку до некоторого предыдущего коммита, вам следует использовать это вместо , отсоединяющего HEAD хранилища:
git reset --hard <commit>
Это сбросит текущую ветвь (или ваш отсоединенный HEAD, если он уже отсоединен) к именованному коммиту, и заставит индекс и рабочее дерево отражать этот коммит (т.е. он отбрасывает любые коммиты, так как указанный коммит вместе с любой незафиксированный контент).
Отделенное состояние HEAD полезно для пересмотра старых состояний, а иногда и для краткосрочной работы, которую вы не уверены, что сохраните. Кроме этого вы, вероятно, хотите избежать этого.