Содержание
Описание проблемы
При рекурсивном клонировании одного репозитория, по неопытности не переключил текущую рабочую ветку в сабмодуле и начал работать в этом сабмодуле, в итоге, при попытке @$push получил ошибку:$ git push fatal: You are not currently on a branch. To push the history leading to the current (detached HEAD) state now, use git push origin HEAD:<name-of-remote-branch>
Конечно же git предупреждал ранее в команде @$status:
$ git status HEAD detached at 6b4f07f ...
НАДО БЫЛО в этот момент переключиться на нужную ветку (например на master) и все было бы без проблем (при отсутсвии коммитов):
$ git checkout master
Но проблема возникла, и надо ее решать.
Немного о HEAD
Начнем с того что @$HEAD это специальный указатель на определенный (текущий) коммит. Этот коммит может быть в какой-то ветке (например в master) или быть вне ветки - это и есть detached HEAD.@$HEAD указывает на ту ревизию репозитория, которая сейчас на данный момент в репозитории, т.е. на что указывает @$HEAD, то сейчас и лежит в репозитории. Коммит, на который указывает @$HEAD , будет являться родительским для нового коммита.
При помощи @$checkout можно смещать @$HEAD в нужный коммит (ходить по истории коммитов) или в нужную ветку (последний коммит в ветке). При смещении @$HEAD (между ветками или между коммитами) произойдет изменение текущего содержимого директории репозитория на то, чтобы было в этом коммите.
Решение проблемы detached HEAD
Относительно проблемы, если коммит вне ветки (detached HEAD), то прямым образом он никак не может быть отправлен на сервер, один из способов решения:- создать новую ветку, на которую будет указывать @$HEAD и куда автоматически попадет вневеточный коммит - git branch temp-branch
- переключиться на нужную ветку (в моем случае это master) - git checkout master
- влить созданную ветку temp-branch в текущую - git merge temp-branch
- отпраить ветку master на сервер - git push origin master
Ссылки на почитать:
- https://stackoverflow.com/questions/38466275/git-detached-head-on-newly-cloned-repo
- https://ru.stackoverflow.com/questions/543838/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D1%8E-detached-head
- https://stackoverflow.com/questions/2304087/what-is-head-in-git
- https://devpractice.ru/git-for-beginners-part-7-head-and-tree-ish/
- https://webhamster.ru/mytetrashare/index/mtb0/1465119902140pozfhh1