如何使用Git命令统计非main分支自指定tag以来的提交次数
Git统计dev分支自指定tag合并后的新增提交数方案
问题原因
你之前使用git rev-list v1.2.3..HEAD --count得到不符合预期的结果,核心原因是双点语法A..B的默认逻辑是统计所有可从B到达、但不可从A到达的提交。dev作为长期开发分支,存在大量合并v1.2.3之前就产生的、从未合并到main的历史提交,这些旧提交都会被计入统计结果,所以数值远大于预期。
正确命令
你可以先定位到dev分支主提交链上最早包含目标tag的节点(也就是你把main上的tag版本合并到dev的合并节点),再从该节点开始统计:
# 合并完成后初始返回0,仅统计合并tag后dev上的新增提交 git rev-list $(git rev-list --first-parent HEAD --contains v1.2.3 | tail -n 1)..HEAD --first-parent --count
如果需要包含合并tag产生的合并提交,可调整为:
# 合并完成后初始返回1(包含合并tag的提交) git rev-list $(git rev-list --first-parent HEAD --contains v1.2.3 | tail -n 1)^..HEAD --first-parent --count
参数说明
git rev-list --first-parent HEAD --contains v1.2.3 | tail -n 1:仅遍历dev分支的主提交链(跳过合并进来的其他分支线),找到最早包含目标tag的提交,也就是统计的基准节点--first-parent:统计时同样只遍历dev的主提交链,避免将其他临时分支合并到dev的提交计入结果- 可按需追加
--no-merges参数,排除所有合并提交,仅统计普通功能提交
效果验证
对应你给出的示例场景:
- 刚把v1.2.3对应的main版本合并到dev后运行第一条命令,返回结果为0,符合预期
- 在dev上新增1次提交后运行,返回结果为1,符合预期
- 若使用包含合并提交的命令,合并完成后返回结果为1,也符合你的备选预期
内容的提问来源于stack exchange,提问作者ppython
相关产品推荐
相关产品推荐

