Что такое head в гите

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

вы видите документацию Git, говорящую такие вещи, как

ветвь должна быть полностью объединена в HEAD.

но что такое Git HEAD точно?

16 ответов

вы можете думать о голове как о «текущей ветви». При переключении ветвей с git checkout глава пересмотра изменения указывают на совет филиала.

вы можете увидеть, на что указывает голова, делая:

В моем случае, вывод такой:

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

голова-это просто ссылка на объект фиксации. У каждой головы есть имя (имя ветви или имя бирки, etc). От по умолчанию, есть голова в каждом репозиторий называется master. Хранилище может содержать любое количество глав. На в любой момент времени выбирается одна голова как «нынешний руководитель».»Это голова aliased to HEAD, always in capitals».

обратите внимание на эту разницу: «голова» (нижний регистр) относится к любому один из названные головы в репозитории; » HEAD» (верхний регистр) относится исключительно к в настоящее время активный руководитель. Этот различие часто используется в Git документация.

еще один хороший источник, который быстро охватывает внутреннюю работу git (и поэтому лучшее понимание голов/головы) можно найти здесь. Ссылки (ref:) или заголовки или ветви можно рассматривать как заметки, прикрепленные к фиксациям в истории фиксации. Обычно они указывают к кончику серии коммитов, но их можно перемещать с помощью git checkout или git revert etc.

Я рекомендую это определение от разработчика GitHub Scott Chacon [прямая ссылка]:

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

все видео даст справедливое Введение во всю систему git, поэтому я также рекомендую вам посмотреть все это, если есть время.

С Pro Git книги, главы 3.1 Git ветвление-ветви в двух словах в разделе создание новой ветви:

что произойдет, если вы создадите новую ветку? Ну, это создает новый указатель для перемещения. Допустим, вы создаете новую ветвь называется тестирование. Вы делаете это с помощью команды git branch:

это создает новый указатель на ту же фиксацию, на которой вы сейчас находитесь

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

предполагая, что это не особый случай под названием «отделенная голова», тогда, как указано в книге О’Рейли Гита, 2-е изд., стр. 69, HEAD означает:

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

HEAD is «наконечник» текущей ветви.

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

как фиксация перед наконечником, и HEAD

2 как совершить еще раньше, и так далее.

HEAD относится к текущей фиксации, на которую указывает ваша рабочая копия, т. е. фиксации, которую вы в настоящее время проверили. От официальная документация ядра Linux по указанию ревизий Git:

HEAD имена фиксации, на которой вы основывали изменения в рабочем дереве.

вместо ввода «HEAD» вы можете сказать » @ «вместо этого, например «git log@».

HEAD-это фактически файл, содержимое которого определяет, куда относится переменная HEAD:

в этом репозитории содержимое файла HEAD ссылается на второй файл с именем refs / heads / master. Файл refs / heads / master содержит хэш последнего коммита в master-ветке.

в результате HEAD указывает на фиксацию главной ветви от .git/refs/heads / master.

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Я бы хотел подробно некоторые вещи принято отвечать Грег Hewgil по. Согласно Git Карманный Гид

отрасли:

сама ветвь определяется как все точки, достижимые в фиксации график из именованной фиксации («подсказка» ветви).

руководитель: специальный тип Ref

специальная головка ref определяет, какая ветвь вы на.

Refs

Git определяет два вида ссылок или именованных указателей, которые он вызывает «refs»:

Как упоминал Грег, голова может быть в «отстраненном состоянии». Поэтому голова может быть либо a простой ref (для отдельно стоящей головы) или symref.

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

Если вы только что клонировали и не проверили, я не знаю, на что это указывает, вероятно, какое-то недопустимое местоположение.

после прочтения всех предыдущих ответов я все еще хотел большей ясности. Этот блог на официальном сайте githttp://git-scm.com/blog дал мне то, что я искал:

голова: указатель на последний моментальный снимок фиксации, следующий родитель

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

Head указывает на кончик текущей проверенной ветви.

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

это может быть кончик определенной ветви (например, «master») или некоторая промежуточная фиксация ветви («отдельная головка»)

эти двое могут смутить вас:

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

рис. 3-5. Главный файл указывает на ветку, на которой вы находитесь.

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

чтобы иметь» чистый » репозиторий, вы должны иметь одну головку на именованную ветвь и всегда сливаться с именованной ветвью после локальной работы.

Источник

Машина времени в git

В последнее время мои коллеги начинают знакомство с git’ом. И один из интересующих их вопросов — как откатиться до определённой ревизии. В интернете можно найти набор команд, но хочется, чтобы было понимание каждой из них. Баловство с комадами git’а без понимания может привести к потере истории разработки.

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Здесь кружочками обозначены коммиты. Чем правее коммит, тем он новее. Коммит с хэшем 6e04e..-это самый первый коммит. Одно из основных понятий, которое стоит уяснить себе новичку, — это указатели на коммиты, а точнее некоторое «прозвище» того или иного коммита. Их тьма тьмущая, например: HEAD, master, FETCH_HEAD, ORIG_HEAD и т.д. Это я перечислил крупицу стандартных прозвищ. Их можно создавать и самим, но об этом впереди.

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

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Перенос указателя HEAD ( git checkout )

Откат по истории коммитов:

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Неужели мы потеряли всю историю? Как узнать самый «новый» коммит? Это не проблема — есть выход, и их несколько:

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Для прояснения механизма git checkout создадим новую ветку devel:

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Заметим, что указатель HEAD указывает на вершину ветки devel.

Породим в новой ветке несколько коммитов. История репозитория будет выглядеть следующим образом:

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Возвращение в ветку master происходит также безболезненно:

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

2 :
Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

2 :
Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

ORIG_HEAD полезен для редактирования неверных коммитов на локальной машине (!). Предположим, что мы хотим объединить два последних коммита в единый. Для этого, сохраняя текущее состояние файлов, переводим указатель master на два коммита назад:

Посмотрим на изменения:

Ну а теперь сделаем трюк — объединяем коммиты

Вводим сообщение, сохраняемся. Теперь наша история выглядит вот так:

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Важное замечание — ORIG_HEAD по-прежнему указывает на коммит d79fb… Если мы сейчас выполним команду git checkout ORIG_HEAD, то мы получим так называемое состояние detach HEAD. Оно характеризуется тем, что HEAD указывает не на вершину ветки, а просто на коммит. HEAD всегда должен указывать только на вершину какой-либо ветки!

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Удачных вам путешествий по истории своего репозитория!

При подготовке материала использовались следующие источники:
Самый лучший manual — книга: ProGit
Наглядная справка по git: A Visual Git Reference (Русская версия)

UPD:
В комментариях посоветовали ещё один полезный ресурс по git`у: githowto

Источник

Git для начинающих. Часть 7. Поговорим о HEAD и tree-ish

HEAD

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

Эти коммиты создавались в порядке от самого нижнего ( a98cce4 ) к самому верхнему ( cf3d9d8 ). Каждый раз, когда мы отправляли новый коммит в репозиторий, HEAD смещался и указывал на него. Посмотрите на картинку ниже: на ней показана ситуация, когда были отправлены три первых коммита.

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Текущее состояние репозитория выглядит так, как показано на рисунке ниже.

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Содержимое репозитория, в данном случае, выглядит так.

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Для этого передадим команде checkout идентификатор коммита.

Вернем HEAD на прежнее место.

Tree-ish

Git для начинающих. Часть 7. Поговорим о HEAD и tree-ish : 2 комментария

А можно чуть подробнее про этот момент?

“Для того, чтобы скопировать снимок репозитория относительно последнего коммита ветки master, т.е. того на который указывает HEAD, необходимо выполнить следующую команду.”
> git checkout master

Я правильно понял, что эта команда “откатывает” предыдущие изменения HEAD?

Нет, git checkout master скопирует проект из репозитория (ветка master) в рабочую директорию, при этом состояние проекта будет определяться последним коммитом, именно на него обычно указывает HEAD. Т.е. мы получаем снимок репозитория относительно последнего коммита. Надеюсь понятно объяснил))) Если что – пишите!

Источник

What is the HEAD in git?

There seems to be a difference between the last commit, the HEAD and the state of the file I can see in my directory.

What is HEAD, what can I do with it and what mistake should I avoid?

6 Answers 6

HEAD is a reference to the last commit in the currently checked-out branch.

There is a small exception to this, which is the detached HEAD. A detached HEAD is the situation you end up in whenever you check out a commit (or tag) instead of a branch. In this case, you have to imagine this as a temporary branch without a name; so instead of having a named branch reference, we only have HEAD. It will still allow you to make commits (which will update HEAD), so the above short definition is still true if you think of a detached HEAD as a temporary branch without a name.

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

HEAD is a ref (reference) to the currently checked out commit.

Generally speaking, HEAD is just a convenient name to mean «what you have checked out» and you don’t really have to worry much about it. Just be aware of what you have checked out, and remember that you probably don’t want to commit if you’re not on a branch (detached HEAD state) unless you know what you’re doing (e.g. are in an interactive rebase).

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

I always thought HEAD

5 means go to 5 commits before. But it doesn’t carry the GO part of the command. It only carries the reference part of the command.

What you can do with that reference varies by the command you select

In layman terms it’s used to answer the question of: WHERE should I go? To which commit?

3..HEAD means from 3 commits to current commit

Usage:

Also make sure you see this answer for What is a detached HEAD.

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

HEAD pointer in Git

Git maintains a reference variable called HEAD. And we call this variable a pointer, because its purpose is to reference, or point to, a specific commit in the repository. As we make new commits the pointer is going to change or move to point to a new commit. HEAD always points to the tip of the current branch in our repository. Now, this has to do with our repository, not our staging index, or our working directory.

Another way to think of it is the last state of our repository or what was last checked out, and because it’s where the repository left off or the last state, you can also say that the HEAD points to the parent of the next commit or it’s where commit writing is going to take place.

I think a good metaphor to think about this is the playback and record head on a cassette tape recorder. As we start recording audio, the tape moves past the head, and it records onto it. when we press Stop the place where that record head is stopped is the place it’ll start recording again when we press Record a second time.Now we can move around, we can move the head to different places, but wherever the head is positioned when we hit Record again that’s where it’s going to start recording.

The HEAD pointer in Git is very similar, it points at the place where we’re going to start recording next. It’s the place where we left off in our repository for the things that we’ve committed.

Источник

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

Вы видите документацию Git, в которой говорится о таких вещах, как

Филиал должен быть полностью объединен в HEAD.

Но что такое Git HEAD точно?

ОТВЕТЫ

Ответ 1

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

В моем случае вывод:

HEAD может ссылаться на конкретную ревизию, которая не связана с именем ветки. Эта ситуация называется отключенным HEAD.

Ответ 2

Обратите внимание на это различие: «голова» (в нижнем регистре) относится к любой из названных голов в хранилище; «ГОЛОВА» (заглавная буква) относится исключительно к текущей активной голове. Это различие часто используется в документации Git.

Другой хороший источник, который быстро охватывает внутреннюю работу git (и, следовательно, для лучшего понимания head/HEAD), можно найти здесь. Ссылки (ref 🙂 или заголовки или ветки могут рассматриваться как заметки, прикрепленные к коммитам в истории коммитов. Обычно они указывают на конец серии коммитов, но их можно перемещать с помощью git checkout или git reset и т.д.

Ответ 3

Я рекомендую это определение от разработчика github Скотта Чакона [ ссылка на видео ]:

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

Все видео даст хорошее представление о всей системе git, поэтому я также рекомендую вам посмотреть все, если есть время.

Ответ 4

Что произойдет, если вы создадите новую ветку? Ну, это создает новый указатель для вас, чтобы двигаться. Допустим, вы создали новую ветку под названием «Тестирование». Вы делаете это с помощью команды git branch:

Это создаст новый указатель на тот же коммит, на котором вы сейчас находитесь

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Ответ 5

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

HEAD «кончик» текущей ветки.

Обратите внимание, что мы можем использовать HEAD для ссылки на самую последнюю фиксацию и использовать HEAD

как фиксацию перед концом, а HEAD

2 в качестве фиксации еще раньше и т.д.

Ответ 6

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

HEAD называет коммит, на котором вы основали изменения в рабочем дереве.

Вместо того, чтобы вводить «HEAD», вы можете сказать «@», например, «git log @».

Ответ 7

В этом репозитории содержимое файла HEAD относится ко второму файлу с именем refs/heads/master. Файл refs/heads/master содержит хэш последней фиксации на главной ветке.

В результате HEAD указывает на фиксацию главной ветки в файле .git/refs/heads/master.

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Ответ 8

Я хотел бы подробно рассказать о некоторых вещах, которые принял Грег Хьюглил. В соответствии с Git Карманным руководством

Отрасль:

сама ветвь определяется как все точки, достижимые в фиксации график из именованного коммита ( «кончик» ветки).

HEAD: Специальный тип Ref

Специальная ссылка HEAD определяет, в какой ветке вы находитесь.

Refs

Git определяет два типа ссылок или именованные указатели, которые он вызывает «рефов»:

Как сказал Грег, HEAD может находиться в «отдельном состоянии». Таким образом, HEAD может быть либо простым ref (для отдельного HEAD), либо symref.

если HEAD является символическим ref для существующей ветки, то вы «on»эта ветка. Если, с другой стороны, HEAD является простым рефлектором напрямую называя фиксацию своим идентификатором SHA-1, тогда вы не «on» любая ветвь, но скорее в режиме «отсоединенный HEAD», который происходит, когда вы проверяете некоторые более ранняя фиксация для проверки.

Ответ 9

Если вы только что клонировали и не проверили, я не знаю, на что это указывает, вероятно, какое-то недопустимое местоположение.

Ответ 10

Голова указывает на верхушку проверенной ветки.

Что такое head в гите. Смотреть фото Что такое head в гите. Смотреть картинку Что такое head в гите. Картинка про Что такое head в гите. Фото Что такое head в гите

Ответ 11

Ответ 12

Прочитав все предыдущие ответы, я все еще хотел большей ясности. Этот блог на официальном веб-сайте git http://git-scm.com/blog дал мне то, что я искал:

HEAD: указатель на последнюю фиксацию фиксации, следующий родительский

Ответ 13

В этих ответах есть, возможно, тонкое, но важное заблуждение. Я думал, что добавлю свой ответ, чтобы прояснить это.

ГОЛОВА ТЫ

К чему может присоединиться ГОЛОВА?

Обычно вы получите что-то вроде этого:

Иногда вы получите что-то вроде этого:

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

Итак, здесь небольшая разница в выводе. Проверка коммита напрямую (вместо ветки) дает нам запятую вместо стрелки. Как вы думаете, мы находимся в отдельном состоянии головы? HEAD все еще ссылается на конкретную ревизию, связанную с именем ветки. Мы все еще в основной ветке, не так ли?

Нету. Мы находимся в состоянии «отсоединенная ГОЛОВА».

В заключение

Ответ 14

Это может быть кончик определенной ветки (например, «master») или некоторый промежуточный коммит ветки («detached head»)

Ответ 15

Рисунок 3-5. HEAD, указывающий на вашу ветку.

Ответ 16

Эти два могут вас смутить:

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

Ответ 17

В дополнение ко всем определениям у меня в голове застряло то, что когда вы делаете коммит, GIT создает объект фиксации в репозитории. У объектов коммитов должен быть родитель (или несколько родителей, если это коммит слияния). Теперь, как git узнает родителя текущего коммита? Таким образом, HEAD является указателем на (ссылку на) последний коммит, который станет родителем текущего коммита.

Ответ 18

Как концепция, голова является последней версией в ветке. Если у вас более одной главы на одну ветвь, вы, вероятно, создали ее при выполнении локальных коммитов без слияния, эффективно создавая неназванную ветвь.

Чтобы иметь «чистый» репозиторий, у вас должна быть одна голова для каждой ветки с именем и всегда сходиться к именованной ветке после того, как вы работали локально.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *