Что такое HEAD в Git?

Ответ

HEAD в Git — это специальный указатель, который всегда ссылается на текущий, активный коммит в рабочем дереве. Это «снимок», на основе которого вы работаете.

Два состояния HEAD:

  1. Привязан к ветке (обычный режим): HEAD указывает на ветку (например, refs/heads/main), а та — на последний коммит. Новые коммиты двигают ветку и HEAD вместе.
  2. Отсоединённый HEAD (detached HEAD): HEAD указывает напрямую на конкретный коммит, а не на ветку. Это происходит при checkout тега или конкретного хеша коммита.

Практические команды:

# Узнать, на какой коммит указывает HEAD
git rev-parse HEAD

# Узнать, на какую ветку указывает HEAD (не сработает в detached состоянии)
git symbolic-ref HEAD

# Выйти из состояния detached HEAD, создав новую ветку от текущего коммита
git switch -c new-branch-name

Важно: Прямые коммиты в состоянии detached HEAD могут быть потеряны, если не создать от них ветку.

Ответ 18+ 🔞

А, слушай, вот эта штука HEAD в гите — это вообще пиздец какой важный указатель, а многие его как манную кашу в детстве — мимо рта. Представь себе, это типа лазерная указка, которая всегда светит прямо в последний, активный коммит, на основе которого ты сейчас ковыряешься в коде. Твой текущий «снимок» вселенной, блядь.

И у этой головы, сука, два режима, как у человека:

  1. Нормальный, привязанный. HEAD вежливо указывает на ветку (ну, main там или feature-bugfix-ебучий), а та уже — на коммит. Делаешь новый коммит — ветка ползёт вперёд, и голова ползёт с ней, всё чинно-благородно.
  2. Отсоединённая голова (detached HEAD). Вот тут начинается ёперный театр. Это когда HEAD — тот ещё максималист — смотрит на ветку, плюётся и говорит «пошла нахуй, я сам знаю, куда мне смотреть». И тыкается напрямую в какой-нибудь старый коммит по хешу или тегу. Работаешь как бы в прошлом, блядь. Опасно, но для разведки — то, что надо.

Чтоб не облажаться, вот тебе команды на все случаи жизни:

# Спросить у системы: «Э, голова, на какой коммит ты сейчас, блядь, смотришь?»
git rev-parse HEAD

# Попробовать вежливо узнать, на какую ветку указывает голова (в detached состоянии тебе пиздато так ответят «а ни на какую, мудак»)
git symbolic-ref HEAD

# Главное правило, если попал в detached: не паниковать, а создать новую ветку от этой точки и свалить оттуда. Как спасательный круг, блядь.
git switch -c new-branch-name

И запомни раз и нахуй: если делать коммиты в состоянии detached HEAD и не создать от них ветку — это как пукнуть на ветру. Сделал, и след простыл, хуй потом найдёшь. Так что либо не делай так, либо сразу цепляй себе «спасательный круг» в виде новой ветки.