JuniorДебаггингИногдаЕщё не отвечали
Что значит «detached HEAD» в git и как из него выйти?
Разработчик переключается на коммит, чтобы его осмотреть, делает коммит, затем запускает git status. Объясните, в каком он состоянии и как сохранить работу.
$ git checkout 9f3c1ab
Note: switching to '9f3c1ab'.
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 switching back to a branch.
HEAD is now at 9f3c1ab Fix off-by-one in parser
$ git commit -am "wip: new attempt"
[detached HEAD 4b21de0] wip: new attempt
Определите причину.
Detached HEAD означает, что HEAD указывает на коммит, а не на ветку — обычно после git checkout <sha>. Коммиты там достижимы только через reflog и могут быть удалены GC. Сохранить: git switch -c new-branch; вернуться: git switch main. Безопасен, пока не коммитите и не забываете.
- ✗Закоммитить в detached HEAD и уйти — коммиты теряются (восстанавливаются через reflog)
- ✗Принимать detached HEAD за «сломанное» состояние и делать reset
- ✗Использовать
git checkoutи для смены ветки, и для просмотра —git switch/git restore(с git 2.23) яснее
- →Что такое
git switch --detachи когда это намеренно? - →Как найти «потерянный» коммит после выхода из detached HEAD?