You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何查找匹配指定模式的首个标签对应的Commit SHA及提交步数

从指定提交回溯查找首个匹配标签的Commit SHA

我刚好处理过类似的需求,下面这些Git命令可以帮你快速定位到目标Commit SHA:

核心解决方案:直接获取目标SHA

如果你只需要首个匹配特定标签表达式的Commit SHA,直接运行这条命令就行:

git rev-list START --tags="v*" --max-count=1

参数说明:

  • START替换成你的起始提交标识,可以是HEAD、具体的Commit SHA,或者分支名
  • --tags="v*"用来过滤标签,这里匹配所有以v开头的标签,你可以根据需求修改通配符(比如要匹配所有标签就去掉这个参数,或者用fix*匹配以fix开头的标签)
  • --max-count=1确保只返回从起始提交回溯找到的第一个符合条件的Commit SHA

你的示例场景测试

对应你提到的提交链1 --- 2 --- 3 --- 4 ---5 --- 6 --- 7,起始提交是7(对应HEAD),标签v1.0.3在提交4上,运行这条命令:

git rev-list HEAD --tags="v*" --max-count=1

就会直接返回提交4的SHA值。

额外需求:同时获取标签名和对应SHA

如果你还想同时看到匹配的标签名和对应的Commit SHA,可以用这条脚本命令:

git for-each-ref --sort=-committerdate --format="%(objectname) %(refname:short)" refs/tags/v* | while read sha tag; do
  if git merge-base --is-ancestor "$sha" START; then
    echo "$sha $tag"
    exit 0
  fi
done

这个脚本会按提交时间排序匹配的标签,然后逐个检查是否是起始提交的祖先,找到第一个符合条件的就输出SHA和标签名并退出。

内容的提问来源于stack exchange,提问作者S. ten Brinke

火山引擎 最新活动