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

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

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

Ответ 1

HEAD - это ссылка на последнюю фиксацию в текущей вывешенной ветке.


Существует небольшое исключение, которое является отключенным HEAD. Отдельная HEAD - это ситуация, в которой вы попадаете, когда вы проверяете фиксацию (или тег) вместо ветки. В этом случае вы должны представить это как временную ветвь без имени; поэтому вместо того, чтобы иметь именованную ссылку на ветку, у нас есть только HEAD. Он по-прежнему позволит вам совершать коммиты (которые будут обновлять HEAD), поэтому приведенное выше краткое определение остается верным, если вы считаете, что отдельный HEAD является временной ветвью без имени.

Ответ 2

HEAD является ссылкой ref (ссылка) на текущий проверочный коммит.

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

Также возможно иметь "отдельную головку". Это происходит, когда вы проверяете что-то помимо (локальной) ветки, например удаленной ветки, определенной фиксации или тега. Наиболее распространенное место для этого - во время интерактивной переустановки, когда вы решите отредактировать фиксацию. В отключенном состоянии HEAD ваш HEAD является прямой ссылкой на фиксацию - содержимое .git/HEAD будет хешей SHA1.

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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

В условиях неспециалиста он использовал, чтобы ответить на вопрос: ГДЕ. К какой фиксации?

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

HEAD это означает (ссылка) на текущую фиксацию

HEAD~1 означает (ссылка) 1 commit перед

.

.

.

HEAD~87 означает (ссылка) 87 фиксируется до

git checkout HEAD~1 действительно перейдет к этой ссылке/commit