← Все вопросы

Что такое HEAD в git простыми словами?

Задан 3 месяца назад1.5к просмотров2 ответа
11

Постоянно встречаю HEAD в командах: HEAD~1, git reset HEAD, «detached HEAD». Не понимаю, что это вообще такое. Объясните простыми словами, что значит HEAD в гите.

2 ответа

13
✓ Принятый ответ — помог автору

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

Когда ты делаешь коммит — он добавляется туда, куда показывает HEAD, и HEAD сдвигается на него. Когда переключаешь ветку — HEAD переезжает на её конец.

Очень полезен синтаксис относительных ссылок:

  • HEAD — текущий коммит (где ты стоишь).
  • HEAD~1 — на один коммит назад (родитель).
  • HEAD~2 — на два коммита назад. И так далее.

Поэтому команды читаются логично:

git reset --soft HEAD~1

= «откатить на один коммит назад от текущего».

git diff HEAD

= «показать, чем рабочая папка отличается от текущего коммита».

А «detached HEAD» (отсоединённая голова) — это когда HEAD указывает не на ветку, а прямо на конкретный коммит. Бывает, когда ты делаешь git checkout <хеш> для просмотра старой версии.

Частая путаница: думать, что HEAD~1 — это «первый коммит» или «коммит номер 1». Нет: тильда ~ означает «назад относительно текущего». HEAD~1 — это предыдущий коммит, а не самый первый в истории.

4

Аналогия: представь книгу (историю коммитов) и закладку в ней. HEAD — это закладка, показывающая, на какой странице (коммите) ты сейчас.

  • Сделал коммит — закладка переехала на новую страницу.
  • HEAD~1 — «на страницу раньше».
  • Сменил ветку — переложил закладку в другую главу.

Есть ещё HEAD^ — почти то же, что HEAD~1 (родитель). Различие проявляется только на merge-коммитах с двумя родителями, новичку об этом можно пока не думать.

Ваш ответ

Войдите, чтобы ответить на вопрос.