Ответ 1
Существует 2 типа тегов - lightweight
и annotated
. Легкие теги - это просто ссылки, указывающие на какой-то объект, тогда как аннотированные теги являются отдельным объектом git сами и хранят гораздо больше информации, такой как автор, коммиттер, сообщение фиксации и т.д.
Когда вы использовали git tag -a
для создания тега, git создал бы для вас аннотированный тег.
^{}
- это синтаксис, используемый для разыменования тега. Он описан в gitrevisions.
-
При использовании с объектами тегов git рекурсивно разыгрывает тег до тех пор, пока не найдет объект без тегов.
-
При использовании с объектами без тегов он ничего не делает и эквивалентен пропуску
^{}
Ссылка refs/tags/v0.1.6
ref в вашем репозитории указывает на объект тега bb944682f7f65272137de74ed18605e49257356c
, который, в свою очередь, указывает на 771a930dc0ba86769d6862bc4dc100acc50170fa
(объект без тегов), который, как я предполагаю, является сохранением информации о фиксации при создании тега.
Итак, когда вы делаете refs/tags/v0.1.6^{}
, git будет разыменовывать тег и разрешать его на 771a930dc0ba86769d6862bc4dc100acc50170fa
- объект без тегов.
Существует также команда git show-ref
, которая может использоваться для перечисления только тегов и, необязательно, разыменования следующим образом, и в вашем случае должен производиться следующий вывод:
$ git show-ref --tags
bb944682f7f65272137de74ed18605e49257356c refs/tags/v0.1.6
a72251d945353a360087eb78ee75287c38a1c0e6 refs/tags/v0.1.7
$ git show-ref --tags --dereference
bb944682f7f65272137de74ed18605e49257356c refs/tags/v0.1.6
771a930dc0ba86769d6862bc4dc100acc50170fa refs/tags/v0.1.6^{}
a72251d945353a360087eb78ee75287c38a1c0e6 refs/tags/v0.1.7
d69e66d7c915b9682618b7f304b80cc0ae4c7809 refs/tags/v0.1.7^{}
Чтобы подтвердить это, вы можете использовать команду git show
, чтобы предоставить вам более подробную информацию об объекте git.
Это информация из одного из моих тестовых хранилищ git.
$ git show 43f9a98886ba873c0468c608f24c408b9991414f
tag v0.1
Tagger: Ash <[email protected]>
Date: Sun Jul 15 00:14:43 2012 -0700
Tagging Stable repo 0.1 :)
-----BEGIN PGP SIGNATURE-----
<PGP-SIGNATURE>
-----END PGP SIGNATURE-----
commit e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
Merge: 796efcd 58e3a4d
Author: Ash <[email protected]>
Date: Sun Jul 15 00:02:44 2012 -0700
Merge branch 'dev' into 'master' for stable 0.1.
$ git show e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
commit e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
Merge: 796efcd 58e3a4d
Author: Ash <[email protected]>
Date: Sun Jul 15 00:02:44 2012 -0700
Merge branch 'dev' into 'master' for stable 0.1.