Что такое ГОЛОВА в git? - PullRequest
       49

Что такое ГОЛОВА в git?

212 голосов
/ 27 марта 2010

Кажется, есть разница между последним коммитом, HEAD и состоянием файла, который я вижу в моем каталоге.

Что такое ГОЛОВА, что я могу с ней сделать и какую ошибку следует избегать?

Ответы [ 5 ]

165 голосов
/ 27 марта 2010

HEAD - ссылка на последний коммит в текущей извлеченной ветке.


Есть небольшое исключение из этого, которое является отделенной ГОЛОВКОЙ. detached HEAD - это ситуация, в которой вы сталкиваетесь всякий раз, когда вместо ветки вы извлекаете commit (или тег). В этом случае вы должны представить это как временную ветку без имени; поэтому вместо ссылки на именованную ветвь у нас только есть HEAD. Он по-прежнему позволит вам совершать коммиты (что приведет к обновлению HEAD), поэтому приведенное выше краткое определение остается в силе, если вы думаете об отключенном HEAD как о временной ветви без имени.

83 голосов
/ 27 марта 2010

HEAD - ссылка (ссылка) на текущий извлеченный коммит.

В обычных состояниях это фактически символический ref для ветви, которую вы извлекли - если вы посмотрите на содержимое .git / HEAD, вы увидите что-то вроде «ref: refs /head / master». Сама ветка является ссылкой на коммит в конце ветки. Следовательно, в нормальном состоянии HEAD фактически ссылается на коммит в конце текущей ветви.

Также возможно иметь «отделенную ГОЛОВУ». Это происходит, когда вы извлекаете что-то, кроме (локальной) ветки, например, удаленную ветку, определенный коммит или тег. Чаще всего это можно увидеть во время интерактивного перебазирования, когда вы решаете редактировать коммит. В отключенном состоянии HEAD ваш HEAD является прямой ссылкой на коммит - содержимое .git / HEAD будет хешем SHA1.

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

14 голосов
/ 12 февраля 2017

HEAD указатель в Git

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

Еще один способ думать об этом - это последнее состояние нашего хранилища или то, что было извлечено в последний раз, и, поскольку это то место, где хранилище остановлено, или последнее состояние, вы также можете сказать, что HEAD указывает на родителя следующего коммит или это где коммит написание будет иметь место.

Я думаю, что хорошей метафорой для размышления об этом является головка для воспроизведения и записи на кассетном магнитофоне. Когда мы начинаем записывать звук, лента проходит мимо головы и записывается на нее. когда мы нажимаем «Стоп», то место, где останавливается головка записи, - это место, с которого она начнет запись снова, когда мы нажимаем «Запись» второй раз. Теперь мы можем двигаться, мы можем перемещать головку в разные места, но везде, где расположена головка когда мы снова нажмем на Record, именно там начнется запись.

Указатель HEAD в Git очень похож, он указывает на то место, где мы собираемся начать запись дальше. Это то место, где мы остановились в нашем хранилище за то, что мы совершили.

11 голосов
/ 21 сентября 2017

Это должен был быть комментарий, но он слишком длинный для коммита

Я всегда думал, что HEAD~5 означает GO до 5 коммитов раньше. Но это не несет GO часть команды. Он содержит только ссылку / 'где' часть команды.

С точки зрения непрофессионала, он используется для ответа на вопрос: ГДЕ мне идти? На что совершаете?

Если вы скажете

HEAD означает (ссылка на) текущий коммит

HEAD~1 означает (ссылка) 1 коммит до

HEAD~87 означает (ссылка на) 87 совершает до

git checkout HEAD~1 фактически перейдет к этой ссылке / совершить

0 голосов
/ 10 марта 2019

Проще говоря, HEAD - это ссылка на последний коммит в текущей ветви извлечения.

Думайте о ГОЛОВЕ как о "текущей ветви". Когда вы переключаете ветки с помощью git checkout, ревизия HEAD меняется, чтобы указывать на вершину новой ветки.

Вы можете увидеть, на что указывает HEAD, выполнив:

cat .git/HEAD

HEAD может ссылаться на конкретную ревизию, которая не связана с именем ветви. Эта ситуация называется отделенной ГОЛОВОЙ.

...