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

wes*_*wes 81 git

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

这可能吗?

CB *_*ley 101

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

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

git describe --exact-match <commit-id>
Run Code Online (Sandbox Code Playgroud)

  • `git describe --tags <commit-id>`用于未注释的标签 (25认同)
  • 在较新的版本中,当你不想在标签上使用垃圾时,`git describe --tags --abbrev = 0 REV`会很有用. (3认同)
  • 如果有多个标签,这不会给出与提交关联的所有标签!IMO 下面的“git tag --points-at &lt;commit-id&gt;”答案可能是大多数人正在寻找的。 (3认同)
  • 我喜欢这个。具体来说,我喜欢可以从当前版本中获得人类可读的内容:``gitdescribe --all --exact-match \`git rev-parse HEAD\`` (2认同)

小智 57

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

git describe --contains <commit>
Run Code Online (Sandbox Code Playgroud)

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

这种形式的git describe运行得非常快,并为您提供单个输出值,这是包含提交的第一个标记以及提交的返回距离.


Alb*_*vas 21

这个怎么样?

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

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


dha*_*rga 19

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

git tag --contains <commit>
Run Code Online (Sandbox Code Playgroud)

  • 正如Charles Bailey上面所说,这并不是我正在寻找的.也许你应该RTFM :) (4认同)
  • 在你问一个关于SO的git问题之前,你不需要阅读整本git手册,对吧?google索引比任何git手册页都要好得多...... (4认同)
  • 这将列出包含给定提交的所有标记(即指向给定提交的子标记的标记),因此它不一定会为给定提交提供单个标记或关于哪个标记最接近的任何信息,除非list只包含一个提交. (3认同)

小智 9

对不起,我不知道如何添加评论,所以发布答案......我发现两个上衣的组合答案给了我想要的东西:

git describe --tags --exact-match <commit-id>
Run Code Online (Sandbox Code Playgroud)

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

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

给你:

$ ReleaseBeta
Run Code Online (Sandbox Code Playgroud)