что такое head в git

Ссылки в Git

Чтобы создать новую ссылку, которая поможет вам запомнить SHA-1 последнего коммита, технически, достаточно выполнить примерно следующее:

Теперь в командах Git вместо SHA-1 можно использовать только что созданную ссылку:

Тем не менее, редактировать файлы ссылок вручную не рекомендуется, вместо этого Git предоставляет более безопасную команду update-ref на случай, если вам потребуется изменить ссылку:

Вот что такое, по сути, ветка в Git — простой указатель или ссылка на последний коммит в цепочке. Для создания ветки, соответствующей предыдущему коммиту, можно выполнить следующее:

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

Теперь база данных Git схематично выглядит так, как показано на рисунке:

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

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

В некоторых случаях файл HEAD может содержать SHA-1 хеш какого-либо объекта. Это происходит при извлечении тега, коммита или удалённой ветки, что приводит репозиторий в состояние «detached HEAD».

Если вы заглянете внутрь HEAD, то увидите следующее:

При выполнении git commit Git создаёт коммит, указывая его родителем объект, SHA-1 которого содержится в файле, на который ссылается HEAD.

Изменить значение HEAD можно так:

Мы рассмотрели три основных типа объектов Git, но есть ещё один. Объект тега очень похож на объект коммита: он содержит имя своего автора, дату, сообщение и указатель. Разница же в том, что объект тега указывает на коммит, а не на дерево. Он похож на ветку, которая никогда не перемещается: он всегда указывает на один и тот же коммит, просто давая ему понятное имя.

Как мы знаем из главы Основы Git, теги бывают двух типов: аннотированные и легковесные. Легковесный тег можно создать следующей командой:

Источник

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 в git. Смотреть фото что такое head в git. Смотреть картинку что такое head в git. Картинка про что такое head в git. Фото что такое head в git

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 в git. Смотреть фото что такое head в git. Смотреть картинку что такое head в git. Картинка про что такое head в git. Фото что такое head в git

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 в git. Смотреть фото что такое head в git. Смотреть картинку что такое head в git. Картинка про что такое head в git. Фото что такое head в git

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.

Источник

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

HEAD

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

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

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

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

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

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

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

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

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

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

Tree-ish

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

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

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

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

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

Источник

What is HEAD in Git?

You see the Git documentation saying things like

The branch must be fully merged in HEAD.

But what is Git HEAD exactly?

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

24 Answers 24

You can see what HEAD points to by doing:

In my case, the output is:

It is possible for HEAD to refer to a specific revision that is not associated with a branch name. This situation is called a detached HEAD.

A head is simply a reference to a commit object. Each head has a name (branch name or tag name, etc). By default, there is a head in every repository called master. A repository can contain any number of heads. At any given time, one head is selected as the “current head.” This head is aliased to HEAD, always in capitals».

Note this difference: a “head” (lowercase) refers to any one of the named heads in the repository; “HEAD” (uppercase) refers exclusively to the currently active head. This distinction is used frequently in Git documentation.

Another good source that quickly covers the inner workings of git (and therefore a better understanding of heads/HEAD) can be found here. References (ref:) or heads or branches can be considered like post-it notes stuck onto commits in the commit history. Usually they point to the tip of series of commits, but they can be moved around with git checkout or git reset etc.

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

2 ), which is not the commit id of a known head. See the article at eagain.net/articles/git-for-computer-scientists for a more thorough explanation.

HEAD is just a special pointer that points to the local branch you’re currently on.

What happens if you create a new branch? Well, doing so creates a new pointer for you to move around. Let’s say you create a new branch called testing. You do this with the git branch command:

This creates a new pointer at the same commit you’re currently on

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

How does Git know what branch you’re currently on? It keeps a special pointer called HEAD. Note that this is a lot different than the concept of HEAD in other VCSs you may be used to, such as Subversion or CVS. In Git, this is a pointer to the local branch you’re currently on. In this case, you’re still on master. The git branch command only created a new branch — it didn’t switch to that branch.

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

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

I recommend this definition from github developer Scott Chacon :

Head is your current branch. It is a symbolic reference. It is a reference to a branch. You always have HEAD, but HEAD will be pointing to one of these other pointers, to one of the branches that you’re on. It is the parent of your next commit. It is what should be what was last checked-out into your working directory. This is the last known state of what your working directory was.

The whole video will give a fair introduction to the whole git system so I also recommend you to watch it all if have the time to.

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

There is a, perhaps subtle, but important misconception in a number these answers. I thought I’d add my answer to clear it up.

HEAD is YOU

What can HEAD attach to?

Normally you’ll get something like this:

Sometimes you’ll get something like this:

You can look at this graphically if you try the following exercise. From a git repository, run this. You’ll get something slightly different, but they key bits will be there. When it is time to checkout the commit directly, just use whatever abbreviated hash you get from the first output (here it is a3c485d ).

OK, so there is a small difference in the output here. Checking out the commit directly (instead of the branch) gives us a comma instead of an arrow. What do you think, are we in a detached HEAD state? HEAD is still referring to a specific revision that is associated with a branch name. We’re still on the master branch, aren’t we?

Nope. We’re in ‘detached HEAD’ state.

In conclusion

Источник

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

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

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

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

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

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

2 ), который не является идентификатором фиксации известного заголовка. См. Статью на eagain.net/articles/git-for-computer-scientists для более подробного объяснения.

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

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

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

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

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

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

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

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

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

в качестве коммита до подсказки, и / HEAD

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

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

ГОЛОВА ТЫ

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

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

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

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

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

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

В заключении

HEAD это ты. Это указывает на то, что вы проверили, где бы вы ни находились. Как правило, это не коммит, это ветка. Если HEAD он указывает на коммит (или тег), даже если это тот же коммит (или тег), на который указывает ветка, вы (и HEAD ) были отсоединены от этой ветви. Поскольку к вам не прикреплена ветка, ветка не будет следовать за вами, когда вы делаете новые коммиты. HEAD Впрочем, будет.

Источник

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

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