显示你在哪个git标签?

我无法找出哪个标签目前被检出。

当我做:

git checkout tag1 git branch 

我似乎无法找出我在哪个标签。 它只logging:

 * (no branch) master 

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

编辑 :JakubNarębski有更多的git-fu。 以下更简单的命令完美地工作:

 git describe --tags 

(或者如果你已经签出了一个带注释的标签没有 – 标签,我的标签是轻量级的,所以我需要–tags。)

原来的答案如下:

 git describe --exact-match --tags $(git log -n1 --pretty='%h') 

有更多的git-fu的人可能有一个更优雅的解决scheme…

这利用了这个事实,即git-log从你检出的内容开始报告日志。 %h打印缩写的散列。 然后git describe --exact-match --tags发现标签(轻量级或注释),完全匹配的提交。

上面的$()语法假定你正在使用bash或类似的。

这对我工作git describe --tags --abbrev=0

当你签出一个标签,你有什么所谓的“分离的头” 。 通常情况下,Git的HEAD提交是一个指向你目前已经签出的分支的指针。 但是,如果您查看本地分支以外的东西(例如标签或远程分支),则会出现“脱离头部” – 您并不是真的在任何分支上。 你不应该在一个孤立的头上做任何提交。

如果您不想进行任何编辑,可以查看标签。 如果你只是检查文件的内容,或者你想从一个标签build立你的项目, 只要你不提交任何提交 ,可以git checkout my_tag并处理文件。 如果你想开始修改文件,你应该创build一个基于标签的分支:

 $ git checkout -b my_tag_branch my_tag 

将从my_tag_branch开始创build一个名为my_tag_branch的新分支。 在这个分支上提交更改是安全的。

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

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

相反,我用:

 git name-rev --tags --name-only $(git rev-parse HEAD) 

显示当前HEAD(或提交)

 git tag --points-at HEAD 

git log --decorate

这将告诉你什么是指向当前签出的提交。