在Git中获取最新标签的最简单方法是什么?

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

输出:

a
b
c

我应该写一个脚本来获得每个标记的日期时间并比较它们吗?


当前回答

git tag -l ac* | tail -n1

获取最后一个以“ac”为前缀的标签。例如,命名为ac1.0.0或ac1.0.5的标记。其他名为1.0.0、1.1.0的标记将被忽略。

git tag -l [0-9].* | tail -n1

获取最后一个标记,其第一个字符为0-9。因此,第一个字符为a-z的标签将被忽略。

更多信息

git tag --help # Help for `git tag`

git tag -l <pattern>

列出名称与给定模式匹配的标签(如果不匹配则全部匹配) 给出了模式)。运行不带参数的“git tag”也会列出列表 所有的标记。模式是一个shell通配符(即匹配使用 :(3))。可以给出多个模式;如果有的话 匹配时,显示标记。


tail -n <number> # display the last part of a file
tail -n1 # Display the last item 

更新

用git标签,帮助,关于排序参数。默认情况下,它将使用字典顺序,if标记。排序属性不存在。

排序顺序 默认为为标记配置的值。对变量进行排序 存在,否则按字典顺序。看到git-config(1)。

谷歌之后,有人说git 2.8.0支持以下语法。

git tag --sort=committerdate

其他回答

git tag --sort=-refname | awk 'match($0, /^[0-9]+\.[0-9]+\.[0-9]+$/)' | head -n 1 

它在所有与语义版本匹配的分支中获取最新的标记。

您可以查看一下git describe,它所做的事情与您所要求的类似。

我的第一个想法是你可以使用git rev-list HEAD,它以倒序的顺序列出所有的转速,并结合git标签-contains。当你找到一个引用,其中git tag——contains生成了一个非空列表,你已经找到了最新的标签。

如果您需要最后两个标记(例如,为了生成当前标记和前一个标记之间的更改日志),下面的工作对我来说是有效的。我只在最新标签是HEAD的情况下测试过它。

PreviousAndCurrentGitTag=`git describe --tags \`git rev-list --tags --abbrev=0 --max-count=2\` --abbrev=0`
PreviousGitTag=`echo $PreviousAndCurrentGitTag | cut -f 2 -d ' '`
CurrentGitTag=`echo $PreviousAndCurrentGitTag | cut -f 1 -d ' '`

GitLog=`git log ${PreviousGitTag}..${CurrentGitTag} --pretty=oneline | sed "s_.\{41\}\(.*\)_; \1_"`

它适合我的需求,但因为我不是git巫师,我相信它可以进一步改进。我还怀疑如果提交历史向前移动,它会中断。我只是想说点有用的。

Git描述——标签

返回当前分支能看到的最后一个标记