我无法找到当前检出的标签。
当我这样做时:
git checkout tag1
git branch
我似乎无法找出我在哪个标签上。它只记录:
* (no branch)
master
是否可以找出签出的标签?在上面的示例中,这将是tag1
。
答案 0 :(得分:258)
编辑: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或类似的。
答案 1 :(得分:45)
这对我有用git describe --tags --abbrev=0
答案 2 :(得分:28)
显示当前HEAD(或提交)
上的所有标签\r
答案 3 :(得分:21)
当您签出标签时,您拥有所谓的"detached head"。通常,Git的HEAD提交是指向您当前已检出的分支的指针。但是,如果您检查的不是本地分支(例如标签或远程分支),那么您有一个“分离头” - 您实际上并不在任何分支上。你不应该在一个独立的头上做任何提交。
如果您不想进行任何编辑,可以签出标签。如果您只是检查文件的内容,或者您想要从标记构建项目,那么git checkout my_tag
可以使用文件,只要您不进行任何提交< / em>的。如果要开始修改文件,则应根据标记创建分支:
$ git checkout -b my_tag_branch my_tag
将从my_tag_branch
开始创建名为my_tag
的新分支。在这个分支上提交更改是安全的。
答案 4 :(得分:20)
git describe
是porcelain命令,您应该避免:
http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html
相反,我使用了:
git name-rev --tags --name-only $(git rev-parse HEAD)
答案 5 :(得分:7)
git log --decorate
这将告诉你什么引用指向当前检出的提交。
答案 6 :(得分:0)
这对我有用 git describe --abbrev = 0 --tags