You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出指定日期后匹配指定模式的Git标签?

解决Git筛选指定模式+日期后标签的问题

你之前试的两个命令其实都只实现了一半需求:第一个能匹配linux*标签但完全没生效日期筛选,第二个能抓近一个月的标签却忽略了模式匹配。问题出在git rev-parse和git rev-list的参数逻辑上——前者不会处理--since这类日期筛选参数,后者的标签模式匹配写法没结合好,而且默认是按提交时间筛选,不是标签的创建时间。

下面给你两个精准的解决方案,按需选择:

方案1:按标签创建时间筛选(推荐)

这个方法直接针对标签的创建时间,用git for-each-ref(专门遍历引用的工具)同时实现模式匹配和日期筛选,结果准确且高效:

# 先查看符合条件的标签列表(带创建时间)
git for-each-ref --sort=creatordate --format '%(refname:short) %(creatordate)' refs/tags/linux* --since='1 month ago'

# 如果要直接查看标签的详细信息,用这个命令
git show --quiet $(git for-each-ref --format='%(refname:short)' refs/tags/linux* --since='1 month ago')

命令解释:

  • refs/tags/linux*:精准匹配所有以linux开头的标签
  • --since='1 month ago':只保留创建时间在1个月以内的标签
  • --format='%(refname:short)':只输出标签的短名称(比如linux-6.5而不是refs/tags/linux-6.5)

方案2:按标签指向的提交时间筛选

如果你想筛选的是标签对应的提交在1个月内(而非标签本身的创建时间),可以用这个循环检查的方式:

git tag -l "linux*" | while read tag; do
  # 检查当前标签的提交是否在1个月内
  if git log -1 --format="%ad" "$tag" --since="1 month ago" >/dev/null; then
    echo "符合条件的标签:$tag"
    # 如需查看标签详情,取消下面的注释
    # git show --quiet "$tag"
  fi
done

为什么之前的命令失效?

  • 第一个命令里的git rev-parse --tags="linux*" --since="1 month":rev-parse的作用是解析引用,根本不支持--since参数,所以日期筛选完全没生效,自然会列出所有linux*标签。
  • 第二个命令的git rev-list --tags="linux*" --since="1 month":这里的--tags="linux*"写法有问题,而且rev-list是遍历标签指向的提交,--since筛选的是提交时间,不是标签创建时间,同时如果仓库里近一个月有其他非linux*标签的提交,也会被拉进来,导致结果不符合预期。

内容的提问来源于stack exchange,提问作者Patryk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:17:25