如何编写Git命令获取仓库内的最新版本标签
解决方案
问题原因
git describe --tags --abbrev=0的作用是获取当前所在提交链上距离最近的标签,而非全局所有标签中版本号最高的标签。你执行命令得到V5.0.0.0,说明你当前工作分支的提交链上最新的带标签提交就是打了V5.0.0.0的提交,后续的V5.0.141.0、V5.0.640.0等标签大概率打在其他分支、或不在当前分支的提交节点上。
正确命令(适配你当前使用的Windows PowerShell环境)
场景1:按语义版本号取最大的标签(适配你示例中V开头+数字版本的命名规则)
git tag -l "V*" | Sort-Object { [version]($_.TrimStart('V')) } | Select-Object -Last 1
命令说明:
git tag -l "V*":筛选所有以V开头的版本标签Sort-Object { [version]($_.TrimStart('V')) }:去掉标签前缀V后转为系统版本类型做语义排序,避免字符串排序出现V5.0.9比V5.0.640.0大的异常问题Select-Object -Last 1:取排序后的最后一个,也就是版本号最大的标签
执行后会直接输出你需要的V5.0.640.0。
场景2:按标签创建时间取最新创建的标签
如果你需要的是最近才打出来的标签而非版本号最大的标签,可以用这个命令:
git for-each-ref --sort=-creatordate --format '%(refname:short)' refs/tags/V* | Select-Object -First 1
命令说明:--sort=-creatordate代表按标签创建时间倒序排列,取第一个就是最新创建的标签。
其他环境补充(Linux/macOS bash/zsh)
如果是类Unix终端,直接用一行命令即可实现语义版本排序取最大:
git tag -l "V*" | sort -V | tail -n 1
内容的提问来源于stack exchange,提问作者Hau Ji Liang
相关产品推荐
相关产品推荐

