266

我无法找出当前签出的标签。

当我做:

git checkout tag1
git branch

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

* (no branch)
master

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

4

6 回答 6

406

编辑:Jakub Narę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 或类似的。

于 2010-08-04T11:54:22.127 回答
100

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

编辑 2020:正如下面的一些评论所提到的,这可能对你有用,也可能对你不起作用,所以要小心!

于 2015-11-11T12:13:46.850 回答
86

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

git tag --points-at HEAD
于 2016-05-28T09:47:25.227 回答
27

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

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

相反,我使用了:

git name-rev --tags --name-only $(git rev-parse HEAD)
于 2014-04-30T17:08:52.653 回答
25

当你签出一个标签时,你有一个所谓的“分离头”。通常,Git 的 HEAD 提交是指向您当前已签出的分支的指针。但是,如果您检查的不是本地分支(例如,标记或远程分支),那么您有一个“分离的头”——您实际上并不在任何分支上。你不应该在一个分离的头上进行任何提交。

如果您不想进行任何编辑,可以查看标签。如果您只是检查文件的内容,或者您​​想从标签构建您的项目,那么只要您不进行任何提交git checkout my_tag,就可以使用并使用这些文件。如果你想开始修改文件,你应该基于标签创建一个分支:

$ git checkout -b my_tag_branch my_tag

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

于 2010-08-04T11:52:44.970 回答
12

git log --decorate

这将告诉您哪些 refs 指向当前签出的提交。

于 2014-11-25T22:19:37.390 回答