Answers:
编辑:JakubNarębski有更多的git-fu。以下简单得多的命令可以完美运行:
git describe --tags
(或者--tags如果没有签出带注释的标签,则不带。我的标签是轻型的,所以我需要--tags。)
原始答案如下:
git describe --exact-match --tags $(git log -n1 --pretty='%h')
git-fu更多的人可能会有更优雅的解决方案...
这利用了git-log从您检出的内容开始报告日志这一事实。%h打印缩写的哈希。然后git describe --exact-match --tags找到与提交完全匹配的标签(轻量或带注释)。
$()上面的语法假定您正在使用bash或类似的东西。
--exact-match在您发表评论的几秒钟前就添加了答案。很高兴知道您可以删除它,并且仍然可以从模糊的输入中获得良好的信息。
                    git rev-parse HEAD是比git log -n1 --pretty='%h'... 更好的解决方案,但是为什么您不能简单地编写HEAD(或者什么也不做,git describe默认为HEAD)?
                    这对我有用 git describe --tags --abbrev=0
显示当前HEAD上的所有标签(或提交)
git tag --points-at HEAD
git describe是瓷器命令,应避免:
http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html
相反,我使用了:
git name-rev --tags --name-only $(git rev-parse HEAD)
^0与标记相对应的提交的尾随(例如,对于1.0其输出的标记1.0^0)。有什么办法只能让Git输出1.0,还是应该为此使用sed?
                    签出标签时,您拥有所谓的“分离头”。通常,Git的HEAD提交是指向您当前已签出的分支的指针。但是,如果您检出的不是本地分支(例如,标记或远程分支),则您的头会“分离”-您实际上不在任何分支上。当您头顶分离时,请勿进行任何提交。
如果您不想进行任何编辑,可以签出标签。如果您只是检查文件的内容,或者想通过标签构建项目,则只要您不进行任何提交,就可以git checkout my_tag使用文件并使用它们。如果要开始修改文件,则应基于标记创建一个分支:
$ git checkout -b my_tag_branch my_tag
将创建一个名为新的分支my_tag_branch从开始my_tag。在此分支上提交更改是安全的。
git describe如果您正好位于(带注释)标记上,<tag>-<n>-g<shortened sha-1>则仅使用会显示标记名称,否则,<n>则显示<tag>。