Ключові поняття

HEAD

HEAD — це спеціальне посилання в Git, яке вказує на поточний коміт, розгорнутий у робочому дереві. Зазвичай, коли ти на гілці, HEAD вказує на останній коміт цієї гілки. Коли ти створюєш новий коміт, HEAD автоматично пересувається вперед на нього. Коли ти скидаєш гілку до іншого коміту, HEAD пересувається відповідно.

Це схоже на поняття поточної директорії в терміналі. Як поточна директорія показує, де ти у файловій системі, так HEAD показує, де ти в історії комітів репозиторію.

Поточний коміт потрібен, щоб Git знав, які файли показувати в робочій директорії, куди додавати нові коміти, з чим порівнювати зміни тощо.

Detached HEAD

Якби існував приз за найгіршу можливу назву для концепту, detached HEAD (англ. detached HEAD — відокремлений HEAD; дослівно звучить як «відірвана голова») точно б його отримав. Назва звучить як щось зламане чи небезпечне, хоча насправді це цілком безпечний стан, який можна використовувати для різних цілей.

Ой, у мене стан detached HEAD! Здається, весь репозиторій зламано!

Спробую пояснити, що насправді означає detached HEAD, через іншу метафору.


Уяви вестерн: пекуча спека, люди прокладають залізничні колії (гілки) через пустелю. У міру просування робіт уздовж колії з'являються нові містечка (твої коміти). Будь-яке з них можна відвідати, подорожуючи колією туди-сюди.

А тепер уяви, що колись існувала колія до старого покинутого містечка. Колії вже може не бути (гілку видалено), але містечко нікуди не зникло (Git зберігає всі коміти).

Оскільки до старого містечка не веде жодна колія, дістатися туди можна лише пішки, зійшовши з рейок (перемкнувшись на коміт через його хеш). Щойно ти там — це і є стан detached HEAD.

В цьому стані містечко можна дослідити: роззирнутися, щось порівняти, переглянути історію. Такі старі містечка зазвичай покинуті не просто так, тож робити там особливо нічого. Але звідси можна будувати далі: прокласти нові колії (створити нову гілку) від старого містечка. Можна навіть звести нове містечко (новий коміт), але воно залишиться ізольованим, поки не з'явиться нова колія (нова гілка).