如何在Git的当前分支中获取最新的标签名称?

690

如何在Git中获取最近的标签?

git tag a HEAD
git tag b HEAD^^
git tag c HEAD^
git tag

输出:

a
b
c

我应该编写一个脚本来获取每个标签的日期时间并进行比较吗?


4
最新创建的标签还是按提交日期排序的最新标签?你接受的答案展示了最新创建的标签。如果有人决定更改现有的标签,这可能会成为问题... - Paebbels
25个回答

1

对于所提出的问题,

如何获取当前分支中最新的标签名称

您想要的是:

git log --first-parent --pretty=%d | grep -m1 tag:

--first-parent 告诉 git log 不要详细列出任何合并历史记录,--pretty=%d 表示仅显示装饰(即提交的本地名称)。grep -m1 表示“仅匹配一次”,因此您只会得到最近的标签。


1

这是一个旧的线程,但似乎很多人都错过了对OP问题最简单、最容易和最正确的回答:要获取当前分支的最新标签,您可以使用git describe HEAD。完成。

编辑:您还可以提供任何有效的refname,甚至是远程的;即git describe origin/master将告诉您可以从origin/master到达的最新标签。


没有任何保证“最近的标签”被任何分支处理。两个可行的解决方案是使用 for-each-ref 命令(https://dev59.com/wHM_5IYBdhLWcg3wXx_Z#5261470)和 rev-listdescribe 的组合(https://dev59.com/wHM_5IYBdhLWcg3wXx_Z#7979255)。 - Julien Carsique
1
这对我来说并不获取最新的标签。 - basickarl
git describe branchname --tags 对我来说可以获取分支上最新的标签(git版本2.12.2)。 - Rob_M

0
为了仅获取当前分支前缀的最新标签/标记名称,我需要执行以下操作:
BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags --abbrev=0 $BRANCH^ | grep $BRANCH
主分支:
git checkout master

BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags 
--abbrev=0 $BRANCH^ | grep $BRANCH

master-1448

Branch custom:

git checkout 9.4

BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags 
--abbrev=0 $BRANCH^ | grep $BRANCH

9.4-6

我的最终需求是对标签进行递增并获取下一个标签的+1。

BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags  --abbrev=0 $BRANCH^ | grep $BRANCH | awk -F- '{print $NF}'

0

如果您的标签是可排序的:

git tag --merged $YOUR_BRANCH_NAME | grep "prefix/" | sort | tail -n 1

0

这里没有提到未标注标签和已标注标签的区别。'describe' 命令适用于已标注的标签,而忽略未标注的标签。

这种方法虽然不太美观,但能够完成所需任务,并且不会在其他分支(以及命令中指定的分支之外:如下面示例中的主分支)中找到任何标签。

过滤应该进行优化(合并),但是也能够完成所需任务。

git log  --decorate --tags master |grep '^commit'|grep 'tag:.*)$'|awk '{print $NF}'|sed 's/)$//'|head -n 1

欢迎批评,因为我现在要把它用起来了 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接