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

获取最后一个Git标签后的最早提交日期(跨平台)

跨平台高效获取Git标签后最早提交的作者日期

核心解决方案

要高效获取指定标签之后的最早提交的作者日期(%aI),且保证跨平台兼容(无需管道或shell特定语法),可以分两步执行Git命令:

  1. 获取目标标签之后的最早提交哈希
    使用git rev-list反转提交顺序后取第一个提交,直接返回标签之后最早提交的哈希值:

    git rev-list --reverse --max-count=1 <tag_name>..HEAD
    

    参数说明:

    • --reverse:将提交顺序从默认的「最新到最早」反转成「最早到最新」
    • --max-count=1:仅返回第一个(即最早的)提交哈希
  2. 根据哈希获取该提交的作者日期
    用git show提取指定提交的作者日期:

    git show -s --format="%aI" <commit_hash>
    

    参数说明:

    • -s:仅显示提交摘要,不输出文件变更内容
    • %aI:输出ISO 8601格式的作者日期,满足时间戳查询需求

合并获取最新标签与最早提交日期(Node.js/Execa实现)

如果需要自动获取最新发布标签并完成查询,在Execa中可以这样实现:

// 获取最新的发布标签
const lastTag = execa.sync('git', ['describe', '--abbrev=0', '--tags']).stdout.trim();

// 获取标签之后最早的提交哈希
const oldestCommitHash = execa.sync('git', ['rev-list', '--reverse', '--max-count=1', `${lastTag}..HEAD`]).stdout.trim();

// 获取该提交的作者日期
const oldestCommitDate = execa.sync('git', ['show', '-s', '--format=%aI', oldestCommitHash]).stdout.trim();

为什么之前的方案存在问题

  • git log -1 <tag>..HEAD --format="%aI":返回标签之后的最新提交,而非最早
  • git log --reverse <tag>..HEAD --format="%aI" -1:Git会先取1个最新提交再执行反转,结果仍为最新提交
  • 带管道的git log --reverse --format=%aI | head -n 1:依赖shell管道,Windows终端不兼容

关键细节说明

  • 选择%aI(作者日期)而非%cI(提交者日期):匹配需求中「提交作者登录名」的查询逻辑,避免PR合并时提交者与作者不一致的偏差
  • 精准过滤范围:该方案获取的是标签之后实际提交到仓库的最早提交,即使PR创建早于标签但合并晚于标签,也能被正确纳入范围,解决了仅靠标签日期筛选的局限性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:18:34