我找不到当前签出的标签。
当我这样做的时候:
git checkout tag1
git branch
我好像找不出我在哪个标签上。它只记录:
* (no branch)
master
是否有可能找出哪些标签被签出?在上面的例子中,这将是tag1。
我找不到当前签出的标签。
当我这样做的时候:
git checkout tag1
git branch
我好像找不出我在哪个标签上。它只记录:
* (no branch)
master
是否有可能找出哪些标签被签出?在上面的例子中,这将是tag1。
当前回答
当你检查一个标签时,你有一个所谓的“分离头部”。通常,Git的HEAD提交是一个指向当前签出的分支的指针。但是,如果签出本地分支以外的内容(例如,标记或远程分支),则有一个“分离头”——您实际上不在任何分支上。你不应该在一个独立的头部上做任何提交。
如果您不想进行任何编辑,可以签出标签。如果你只是检查文件的内容,或者你想从一个标记构建你的项目,git签出my_tag并使用文件是可以的,只要你不做任何提交。如果你想开始修改文件,你应该基于标签创建一个分支:
$ git checkout -b my_tag_branch my_tag
将从my_tag开始创建一个名为my_tag_branch的新分支。在这个分支上提交更改是安全的。
其他回答
Git描述的是一个瓷器命令,你应该避免:
http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html
相反,我使用:
git name-rev --tags --name-only $(git rev-parse HEAD)
Git日志—装饰
这将告诉你哪些引用指向当前签出的提交。
Edit
Jakub narabbski报道。下面这个简单得多的命令可以很好地工作:
git describe --tags
(如果签出了带注释的标记,则不使用——标记。我的标签很轻,所以我需要——标签。)
原来的答案
git describe --exact-match --tags $(git log -n1 --pretty='%h')
更有天赋的人可能会有更优雅的解决方案……
这利用了git-log从您签出的内容开始报告日志的事实。%h打印缩略散列。然后git describe——exact-match——tags找到与提交完全匹配的标记(轻量级的或带注释的)。
上面的$()语法假设您正在使用bash或类似的方法。
当你检查一个标签时,你有一个所谓的“分离头部”。通常,Git的HEAD提交是一个指向当前签出的分支的指针。但是,如果签出本地分支以外的内容(例如,标记或远程分支),则有一个“分离头”——您实际上不在任何分支上。你不应该在一个独立的头部上做任何提交。
如果您不想进行任何编辑,可以签出标签。如果你只是检查文件的内容,或者你想从一个标记构建你的项目,git签出my_tag并使用文件是可以的,只要你不做任何提交。如果你想开始修改文件,你应该基于标签创建一个分支:
$ git checkout -b my_tag_branch my_tag
将从my_tag开始创建一个名为my_tag_branch的新分支。在这个分支上提交更改是安全的。
这对我有用git describe -tags -abbrev=0
编辑2020:正如下面的一些评论所提到的,这可能对你有用,也可能没用,所以要小心!