Что такое голова в Git?

Иногда вы видите документацию Git, ссылающуюся на что-то под названием HEAD. Например, ветка должна быть полностью интегрирована в HEAD. Но что именно Git HEAD?

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

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

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

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

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

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

cat .git / HEAD:

  • Он показывает содержимое .git / HEAD, как показано ниже
  • Ref: Refs / Heads / Master
  • По сути, это символическая ссылка на последнюю подтвержденную ветвь, которую вы извлекли, и она фактически указывает на фиксацию в начале текущей ветки.

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

git diff HEAD..HEAD ~ 3: Точнее, HEAD - это движущийся указатель, который может ссылаться на текущую ветку или не может, но всегда ссылается на «текущий коммит». Это (текущий коммит) коммит, «git commit» построен на основе, и его часто сравнивают с «git diff –cached» и «git status».

git log @: ввод 'HEAD' занимает много времени, особенно когда есть ярлык, вместо '@'. Символ '@' выбран потому, что он естественно следует синтаксису (например, (u)), но кроме этого нет ссылки или операции, а когда нет ни одного из них, «HEAD 'можно предположить вместо @.

1. Отдельная ГОЛОВА

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

Давайте рассмотрим пример, в котором мы извлекаем коммит b тем или иным способом.

  • мастер проверки git ^#or
  • git checkout v3.1

Обратите внимание, что независимо от того, какая команда извлечения используется, HEAD теперь будет ссылаться на коммит b. Этот статус b называется отделенным состоянием HEAD.

Давайте рассмотрим примеры ниже, чтобы увидеть, что происходит при создании коммита:

git checkout -b foo: Сначала создается новая ветка с именем foo, которая ссылается на коммит f, который, в свою очередь, обновляет HEAD, чтобы он указывал на ветку foo. Это означает, что он больше не будет находиться в отключенном состоянии HEAD.

git branch foo: это создает новую ветку с именем foo, которая называется commit f, но HEAD остается отсоединенным.

git tag foo: это также создает новый тег с именем foo, который ссылается на commit f, но HEAD остается отсоединенным.

Предположим, вы перешли в положение, отличное от commit f, затем сначала необходимо восстановить имя объекта (обычно это делается с помощью команды git reflog), а после этого создается ссылка на него.

Чтобы узнать последние две коммиты, на которые ссылается HEAD, используйте одну из следующих команд:

  • git log -g -2 HEAD #or
  • мерзавец рефлог -2 ГОЛОВА

2. ORIG_HEAD

Есть еще один тип ГОЛОВКИ, о котором вам нужно знать. Команды «объединить» или «вытянуть» всегда оставляли исходный конец текущей ветви в чем-то, называемом ORIG_HEAD. Его можно использовать с помощью следующих команд.

git reset –hard ORIG_HEAD: с помощью этого метода hard hard возвращает индексный файл вместе с рабочим деревом в исходное состояние, одновременно сбрасывая кончик ветви в этот коммит, но он отменяет локальные изменения.

git reset –merge ORIG_HEAD: Но что если вы хотите сохранить локальные изменения, то есть вы можете использовать вышеуказанную команду, чтобы сохранить локальные изменения. Кроме того, merge всегда устанавливает «.git / ORIG_HEAD» в исходное состояние HEAD, так что проблемное слияние может быть удалено с помощью git reset ORIG_HEAD. В дополнение к этому, слияние всегда устанавливает '.git / ORIG_HEAD' в исходное состояние HEAD, чтобы удалить проблемное слияние с помощью 'git reset ORIG_HEAD'.

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

Преимущества Git HEAD

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

Вывод

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

Рекомендуемые статьи

Это руководство к «Что такое голова в Git?». Здесь мы обсуждаем указатель HEAD в Git, который включает в себя Detached HEAD и ORIG_HEAD, а также преимущества Git HEAD. Вы также можете посмотреть следующие статьи, чтобы узнать больше -

  1. Что такое Git Fetch?
  2. Git Fetch против Git Pull
  3. Что такое Git Branch?
  4. Git Терминология
  5. Система контроля версий GIT
  6. Git Push
  7. Три стадии жизненного цикла Git с рабочим процессом
  8. Как использовать GIT Cherry-pick с примером?