Принцип работы HEAD - это содержимое файла .git / HEAD.Извлечение ветви приводит к .git / HEAD, содержащему имя ветви (полный ref).Имя ветви затем оценивается как путь в каталоге .git, который содержит хэш.Поэтому, когда вы делаете новый коммит в этой ветке, меняется только ссылка на хэш последнего коммита..git / HEAD менять не нужно.
Когда вы извлекаете хеш коммита напрямую, .git / HEAD просто содержит хеш коммита.Например, если вы извлекаете хеш коммита, представляющий последний коммит в master , он более или менее совпадает с извлечением master .
Единственное отличиев том, что фиксация master или получение обновлений из общедоступного репозитория не изменит то, к чему вы были извлечены, а фиксация из этого состояния не изменит ветку master .
Пример сеанса, демонстрирующий некоторые из этих моментов:
util$ cat .git/HEAD
ref: refs/heads/master
util$ cat .git/refs/heads/master
3e213b3d373a9d157426db2ae40e0b5b8ba9c3b2
util$ git checkout 3e21
Note: checking out '3e21'.
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 performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 3e21 edit_with_editor() takes a line kwarg
util$ cat .git/HEAD
3e213b3d373a9d157426db2ae40e0b5b8ba9c3b2
Таким образом, 'master' оценивает хеш коммита, только косвенно:
util$ git rev-parse master
3e213b3d373a9d157426db2ae40e0b5b8ba9c3b2
Если я сделаюпри фиксации в этом состоянии, он меняет HEAD, но не master:
util$ echo Example change >> README
util$ git commit -a -m "example commit in detached head state"
[detached HEAD 45d4] example commit in detached head state
1 file changed, 4 insertions(+)
create mode 100644 README
util$ cat .git/HEAD
45d4b4f7816dc7626be6f7166f7cf972dc18a9d7
util$ git rev-parse master
3e213b3d373a9d157426db2ae40e0b5b8ba9c3b2