Ответ
HEAD — это специальный указатель в Git, который всегда ссылается на текущий коммит в рабочем дереве. Это «точка, где вы сейчас находитесь» в истории коммитов.
Два основных состояния HEAD:
-
Привязанный (Attached) HEAD Указывает на ветку, а ветка, в свою очередь, указывает на коммит. При создании нового коммита ветка продвигается вперед, и HEAD движется вместе с ней.
# HEAD указывает на ветку 'main' $ cat .git/HEAD ref: refs/heads/main -
Отсоединенный (Detached) HEAD HEAD указывает напрямую на конкретный коммит, а не на ветку. Это состояние возникает при:
- Переходе на конкретный тег или коммит.
- Просмотре истории.
# Переход в состояние detached HEAD $ git checkout a1b2c3d4 Note: switching to 'a1b2c3d4'... You are in 'detached HEAD' state...
Практическое значение и команды:
- Создание коммита в detached HEAD создаст новый коммит, который не будет принадлежать ни одной ветке и может быть потерян для сборщика мусора Git.
- Чтобы сохранить изменения из detached HEAD, создайте новую ветку:
# Находясь в detached HEAD, создать ветку от текущего коммита $ git branch new-feature-branch $ git checkout new-feature-branch - Команды, которые используют/меняют HEAD:
git checkout,git reset,git commit,git merge.
Важно: Большую часть времени вы должны работать с привязанным HEAD, чтобы ваши коммиты автоматически продвигали ветку.
Ответ 18+ 🔞
А, ну вот, опять про эту вашу голову, блядь! HEAD, сука! Не голова, а прямо пиздец какой-то указатель, который вечно куда-то тычет, как мой сосед алкаш в стену.
Смотри, чтобы не быть полным мудаком, запомни: HEAD — это как твой палец, которым ты показываешь: «Я щас вот тут, на этом коммите, сижу». Точка, блядь.
Две главные позы этой головы, ёпта:
-
Голова привязанная (Attached) Это когда она нормальная, а не оторванная. Она указывает на ветку, а ветка — на коммит. Делаешь новый коммит — ветка ползёт вперёд, и голова твоя туда же, как приклеенная.
# Голова показывает на ветку 'main', всё чинно-благородно $ cat .git/HEAD ref: refs/heads/main -
Голова отсоединённая (Detached) А вот это, сука, состояние! Прямо как у того Герасима из «Муму», когда он всё понял, но нихуя сказать не может. Голова отвалилась и тычет прямо в какой-то старый коммит. Бывает, когда полез в историю посмотреть, какую-то дичь творил три месяца назад.
# Ну всё, попал, голова отвалилась $ git checkout a1b2c3d4 Note: switching to 'a1b2c3d4'... You are in 'detached HEAD' state... (читай: ты в жопе, дружок)
А нахуя это знать, спросишь ты?
- Если начнёшь коммитить с оторванной головой — это как строить дом на песке, который потом сборщик мусора Гита смоет, и останешься ты с этой головой в руках и охуевшим лицом.
- Чтобы не быть идиотом и не потерять всё, сделай из этой жопы ветку:
# Опа, а я не лох, я ветку создам! $ git branch new-feature-branch $ git checkout new-feature-branchВот теперь голова снова приделана, и можно жить.
- Команды, которые эту голову крутят:
git checkout,git reset,git commit,git merge. С ними аккуратнее, а то открутишь нахуй.
Главный вывод, чтобы не обосраться: 99% времени у тебя должна быть голова привязанная. Чтобы коммиты твои ветку двигали, а не болтались в пустоте, как хуй в проруби. Всё, иди работай.