显示您所在的git标签?

grm*_*grm 197 git git-checkout git-tag

我无法找到当前检出的标签.

当我做:

git checkout tag1
git branch
Run Code Online (Sandbox Code Playgroud)

我似乎无法找出我在哪个标签上.它只记录:

* (no branch)
master
Run Code Online (Sandbox Code Playgroud)

是否有可能找出签出的标签?在上面的例子中,这将是tag1.

bst*_*rre 290

编辑:JakubNarębski有更多的git-fu.以下更简单的命令可以完美地运行:

git describe --tags
Run Code Online (Sandbox Code Playgroud)

(或者--tags如果你已经签出了带注释的标签,那就没有.我的标签很轻,所以我需要--tags.)

原始答案如下:

git describe --exact-match --tags $(git log -n1 --pretty='%h')
Run Code Online (Sandbox Code Playgroud)

有更多git-fu的人可能会有更优雅的解决方案......

这利用了git-log从您检出的内容开始报告日志的事实.%h打印缩写哈希.然后git describe --exact-match --tags找到与该提交完全匹配的标记(轻量级或带注释的).

$()上面的语法假设您正在使用bash或类似的.

  • 如果你正好在(注释)标签上,只要使用`git describe`就会显示标签名称,或者如果没有,那么`<tag> - <n> -g <缩短了sha-1>`,其中`<n>`是数字从`<tag>`开始提交. (17认同)
  • 使用`git rev-parse HEAD`是一个比`git log -n1 --pretty ='%h'`更好的解决方案...但是为什么你不能简单地写`HEAD`(或者什么都没有,因为`git describe`默认为头)? (2认同)

M K*_*M K 62

这对我有用 git describe --tags --abbrev=0

  • 唔....如果您在标记之后签出哈希三次提交,那么您就不会"在该标记上".它会告诉您签出之前或之后的最后一个标记.所以这是不正确的. (8认同)
  • 是的。即使您不完全在该标签上,这也有效!:) (3认同)
  • 唯一有效的!谢谢 (2认同)
  • 将“--exact-match”添加到此答案中以仅查看当前提交的标签。 (2认同)

Geo*_*lka 40

显示当前HEAD(或提交)上的所有标签

git tag --points-at HEAD
Run Code Online (Sandbox Code Playgroud)

  • 请注意,即使结果为空,此命令也不会在命令行报告错误。漏洞?如果该位置有多个标签,它还会返回一个列表。这是最好的答案,但脚本编写者应谨慎行事,牢记这些警告。 (2认同)

小智 22

git describe瓷器命令,你应该避免:

http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html

相反,我用过:

git name-rev --tags --name-only $(git rev-parse HEAD)
Run Code Online (Sandbox Code Playgroud)

  • 只是一些概念上的挑剔:我认为你颠倒了瓷器和管道的含义.可以使用瓷器,它是高水平的,适用于[正常使用](https://schacon.github.io/git/git.html).Plumbing ist internal(顾名思义)并且不推荐使用,因为git开发人员保留在没有警告的情况下更改其参数和输出的权利.所以你的第一个建议实际上是稍微合适一点. (13认同)
  • 它正在返回"未定义" (8认同)
  • 链接的文章说避免使用"git branch",因为它不适用于这个用例.我想不出任何有理由避免使用git describe.就像Leo所说,"瓷器"命令是你通常应该使用的命令.除非你真的知道自己在做什么,否则请避免使用管道命令."git describe"效果很好. (5认同)
  • 这为对应于标签的提交输出一个尾随的"^ 0"(例如,对于标签"1.0",它输出"1.0 ^ 0").有没有任何方法让Git输出只有`1.0`,或者我应该使用sed吗? (4认同)
  • "瓷器"命令是你应该使用的命令,而不是你应该避免使用的命令.它们是输出是机器可读的命令,在将来的版本中不会改变,所以可以依赖于脚本等.非瓷器命令往往会产生更多人类可读的输出,但在未来的版本中它可能会改变,例如使其更多可读,不是因为重要的东西实际上已经改变. (4认同)

mip*_*adi 21

当你签出一个标签时,你会得到一个叫做"独立头"的东西.通常,Git的HEAD提交是指向您当前已检出的分支的指针.但是,如果您检查的不是本地分支(例如标签或远程分支),那么您有一个"分离头" - 您实际上并不在任何分支上.你不应该在一个独立的头上做任何提交.

如果您不想进行任何编辑,可以签出标签.如果您只是检查文件的内容,或者您​​想从标签构建项目git checkout my_tag,只要您不进行任何提交,就可以使用这些文件.如果要开始修改文件,则应根据标记创建分支:

$ git checkout -b my_tag_branch my_tag
Run Code Online (Sandbox Code Playgroud)

将创建一个名为my_tag_branchstart from 的新分支my_tag.在此分支上提交更改是安全的.

  • 很棒的答案。 (3认同)

小智 8

git log --decorate

这将告诉您哪些ref指向当前检出的提交.