Что такое 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