如何找到与给定git提交相关联的标记?

时间:2009-09-24 20:58:22

标签: git

对于版本,我通常使用类似v1.1.0的标记进行标记。在我的构建脚本中,我正在创建一个包含当前git信息的fwVersion.c文件。目前,我在文件中提交了分支信息,但我想添加标记。

这可能吗?

6 个答案:

答案 0 :(得分:91)

查看git describe的文档。它找到给定提交的最近标记(即指向提交的祖先的标记),并根据标记描述该提交。

如果您只想知道标记是否指向了提交,那么您可以检查输出:

git describe --exact-match <commit-id>

答案 1 :(得分:51)

如果你想要的是第一个包含提交的标签:

git describe --contains <commit>

给出了最佳答案IMO。如果你有频繁的标签而不是在大型存储库中的旧提交上使用“git tag --contains”,则可能需要一段时间才能运行,并为您提供包含该提交的所有标记。

这种形式的git describe运行速度非常快,并为您提供单个输出值,这是第一个包含提交的标记以及提交的时间。

答案 2 :(得分:15)

您可以在手册中找到此信息

git tag --contains <commit>

答案 3 :(得分:15)

这个怎么样?

git tag --points-at <commit-id>

它为您提供了给定提交所具有的所有标记(而git describe仅提供了一个),并且不包含后代提交的标记(如git tag --contains那样)。

答案 4 :(得分:7)

抱歉,我不知道如何添加评论,以便发布答案...... 我发现两个上衣的组合回答给我我想要的东西:

git describe --tags --exact-match <commit-id>

这为您提供了仅适用于该提交的标记以及没有注释的标记。 当你想要找到标签而不担心剥离格式时很有用(例如Jenkins)。

例如。 $ git describe --tags --exact-match head~2

给你:

$ ReleaseBeta

答案 5 :(得分:0)

合并一些答案:

git tag --contains [<ref>]

git tag --points-at [<ref>]

或者只是

git tag

具有相同的功能,为指定的ref或当前提交(如果未指定)打印任何(和所有)标签。

git describe --tags [<ref>]

其中<ref>默认为当前提交,如果没有与该提交关联的标签,则以128退出,并打印与该提交关联的标签(似乎没有模式)。

git describe [<ref>] 行为与--tags相同,只是它只打印带注释的标签。

--contains提供选项describe将打印与指定提交的祖先关联的标签。例如

$ git init
Initialized empty Git repository in /tmp/test
$ git commit -m one --allow-empty
[master (root-commit) 7fdfff2] one
$ git commit -m two --allow-empty
[master cd5f8f1] two
$ git tag -am foo foo
$ git tag bar
$ git log --format=oneline
cd5f8f1f4f29eb164f83e224768ccaf37fe170ed (HEAD -> master, tag: foo, tag: bar) two
7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1 one
$ git describe 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
fatal: No tags can describe '7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1'.
Try --always, or create some tags.
$ git describe --contains 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
bar~1