指向提交的Git标记,该提交不';不出现在日志中

指向提交的Git标记,该提交不';不出现在日志中,git,Git,我运行了一个脚本,应该创建一个git标记 搜索该标记时:git show ref--tags 我得到一个提交:020795b077753c2034500f10f17dbc82edf refs/tags/my tag 然后,当我搜索包含该提交的分支时: git branch --contains 020795b07753c02034500f10f17dbc82edf 我得到一个分支:feature/my feature 问题是,如果我通过feature/my feature(使用git log获

我运行了一个脚本,应该创建一个git标记

搜索该标记时:
git show ref--tags

我得到一个提交:
020795b077753c2034500f10f17dbc82edf refs/tags/my tag

然后,当我搜索包含该提交的分支时:

git branch --contains 020795b07753c02034500f10f17dbc82edf
我得到一个分支:
feature/my feature

问题是,如果我通过
feature/my feature
(使用
git log
获得)的日志搜索
020795b07753c02034500f10f17dbc82edf
,我找不到它


知道为什么标记指向日志中没有的提交吗?

正如Lasse V.Karlsen在评论中所说的,您拥有的是一个带注释的标记

没有意义的部分是您对运行
git cat文件-p 020795b077753c2034500f10f17dbc82edf
时会发生什么的注释回答。你说你有:

object 020795b07753c02034500f10f17dbc82edf
type commit
tag my-tag [maven-release-plugin]
copy for tag my-tag
这意味着您发现了另一个哈希冲突:一个ID为
020795b07753c02034500f10f17dbc82edf
的标记对象,但它指向的提交对象的ID也是
020795b07753c02034500f10f17dbc82edf
。这实际上是不可能的,不是因为不可能发生冲突(请参阅),而是因为Git在一个ID下存储了两个不同的对象。这是因为Git对对象的“真实名称”,即它查找对象内容的方式,就是散列ID。一旦Git存储了一个具有一个ID的对象,它就会拒绝存储另一个,具有相同ID的不同对象。如果
020795b07753c02034500f10f17dbc82edf
已经是提交对象,则以
020795b07753c02034500f10f17dbc82edf
名称插入标记的尝试将被拒绝


下面是Git存储库中用于Git本身的带注释标记的示例:

$ git show-ref --tags
[massive amount of output snipped]
f883596e997fe5bcbc5e89bee01b869721326109 refs/tags/v2.9.3
这里的
v2.9.3
是一个标记名,
refs/tags/
中的一个引用,指向Git对象
f883596e997fe5bcbc5e89bee01b869721326109
。对象本身是一个带注释的标记:

其内容是标记对象,它指向提交对象:

$ git cat-file -p f883596e997fe5bcbc5e89bee01b869721326109
object e0c1ceafc5bece92d35773a75fff59497e1d9bd5
type commit
tag v2.9.3
tagger Junio C Hamano <gitster@pobox.com> 1471018679 -0700

Git 2.9.3
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAABAgAGBQJXrfa3AAoJELC16IaWr+bLLY8QANE8ZaL+qyhjC8fHfJhhr4cY
GeZe8x9SSTNv0WzOvXGf34XwdpOYYiVrUrwlgBx6HglhDeYzCp4kObR5sHwtTKgN
r0KKvAuvjlZJm5tWNavu2fDoHKhE+QRP3AagaF5iDX68QLjhGOS8+zAWqNRukh7y
X6tmdUhGhWPtUKr1LBUVd94GdF8v5tggCNDcqZZj+dPIosPvlDqGWT29/IKyCU/a
4o91hD5jWkMybfyTwzZDsSYmtB4TXxML8idJUdZQ5LyyPq9uSU63lgP8ljwivYzy
oiVB1OOawym7+PeyvZEvLvpFW1Ks7YSTCMNQjn4Y3dxYF3szuoPZV3ztCzngoEIG
qSuzA0sn6zfaMWAQF2Yjix2zBfSlBXmxNzA/WqYAyNr3Lsias5A/X9nFtowSEi56
0iFVilSsKWc3bC0oNEyYFlUs1kY4rR2S5kbBXTJ6l75bvDvXP/L+JXm4QcRCr92i
6i7NYxeNqfnZZV72KeG2EqZaL4mrXAY68Mjv8jd/80oogCUDBhlTKd8IK/WG64M9
VjfHpvKmtkBaIq6Zz0cQxO1pe4F64GzSNzlC9l787iQCnUW+4BO7OyEAByJWzHn+
D5oSfWI79MDVdvw2UlHvk1tg4bNNYLcNwTGZGQhcwXudv7hpzW3s1PBNY0LzXGux
LBOdlVeCcsYGr2rsRMbm
=PhTI
-----END PGP SIGNATURE-----
而提交对象看起来又很正常:

$ git cat-file -p e0c1ceafc5bece92d35773a75fff59497e1d9bd5
tree 3cc4bf42e1b9aaa3c650af7247019890f7e01c95
parent 9b601eafd1437df2e11b032bfbfd1ac5d32d3290
author Junio C Hamano <gitster@pobox.com> 1471018671 -0700
committer Junio C Hamano <gitster@pobox.com> 1471018671 -0700

Git 2.9.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
$git cat文件-p E0C1CEAFC5BEC92D35773A75FFF59497E1D9BD5
树3CC4BF42E1B9AA3C650AF7247019890F7E01C95
父级9b601eafd1437df2e11b032bfbfd1ac5d32d3290
作者Junio C Hamano 1471018671-0700
提交人Junio C Hamano 1471018671-0700
Git 2.9.3
签字人:Junio C Hamano

在Git领域一切都很好。

如果您执行Git cat文件-p 020795b07753c02034500f10f17dbc82edf?
对象020795b07753c02034500f10f17dbc82edf类型提交标记我的标记[maven发布插件]复制标记我的标记
。最后一行出现是因为我正在使用
maven release plugin
生成标记。听起来很奇怪,
git branch--contains
说它在分支中,但
git log
说它不在分支中。您是如何搜索git日志输出的?您是否尝试过使用
git log feature/my feature | grep 020795b
?等等,这是对标记对象的哈希引用还是提交对象的哈希引用?如果您创建了一个标记对象,只要使用
git tag xyz
就可以得到一个标记引用,但是如果你做了
git-tag-a xyz-m'message'
,你会得到一个标记对象和一个标记引用。然后,引用将引用标记对象而不是提交对象。我认为其中一个主要原因是你可以在标签上签名等等。
$ git cat-file -t e0c1ceafc5bece92d35773a75fff59497e1d9bd5
commit
$ git cat-file -p e0c1ceafc5bece92d35773a75fff59497e1d9bd5
tree 3cc4bf42e1b9aaa3c650af7247019890f7e01c95
parent 9b601eafd1437df2e11b032bfbfd1ac5d32d3290
author Junio C Hamano <gitster@pobox.com> 1471018671 -0700
committer Junio C Hamano <gitster@pobox.com> 1471018671 -0700

Git 2.9.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>