10.3. Git References

Это типа конспект, который я веду для себя, чтобы получше разобраться и запомнить. Вероятно, вам лучше сразу читать оригинал: 10.3 Git References.

References

Как мы можем видеть, в файлах веток и тэгов указан objectId того объекта, на который идёт ссылка.

Так можно создать ветку:

Однако есть более феншуйный способ:

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

Если запихать в ветку коммит, то можно написать:

Если, к примеру, ветка будет указывать на дерево, то git log ничего не покажет, равно как и с самим айдишником дерева.

HEAD

Обычно HEAD — это указание на текущую ветку, причём на саму ветку, а не на коммит, куда она указывает. Это называется symbolic reference. Когда вы находитесь на коммите вне веток, то HEAD указывает на сам коммит.

Для работы с симрефами есть команда, хотя и cat + echo подойдёт:

Ссылку непонятно куда нельзя создать:

Можно создать симреф с любым именем:

Симрефы создаются в корне.git:

Tags

Как мы рассказывали в Git Basics тэги бывают двух видов: аннотированные и лёгкие.

Лёгкий:

Тот же эффект:

Аннотированный:

Аннотированным тэгом можно тэгнуть любой объект:

In the Git source code, for example, the maintainer has added their GPG public key as a blob object and then tagged it. You can view the public key by running this in a clone of the Git repository:

The Linux kernel repository also has a non-commit-pointing tag object — the first tag created points to the initial tree of the import of the source code.

А можно ли обычным? Вроде можно:

Remotes

Это read-only рефы, которые указывают на те же объекты, на которые указывали рефы репозитория на сервером в тот момен, когда ваш репозиторий в прошлый раз контачил с тем сервером.

Если вы сделаете туда git cehckout, то HEAD не станет симрефом на реф из remotes, и вы не сможете сдвинуть эту ветку сделав коммит.