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>
。