.NET项目main分支合并release后GitVersion版本计算异常
问题原因
版本计算异常由配置逻辑和操作缺失共同导致:
- 你的main分支配置了
prevent-increment-of-merged-branch-version: true,该规则会阻止GitVersion在main分支上直接继承被合并分支的版本号,也就是说release分支上算出的1.0.0不会直接作为main分支的版本计算基线。 - release分支配置了
is-release-branch: true,所以单独在release分支上时,GitVersion会直接从分支名(release/1.0.0)提取版本号得到1.0.0,但这个分支名取版本的逻辑仅对release分支本身生效,不会随合并操作自动同步到main分支。 - 你在合并release到main之后,没有在合并提交点打符合
tag-prefix: '[vV]'规则的版本标签(如v1.0.0),GitVersion在main分支遍历提交历史找不到任何可用的版本基线,就会回退到默认初始版本0.1.0。
修复方法
根据你的工作流习惯选一种即可:
- 遵循标准GitFlow实践(推荐):每次release分支合并到main时,在合并提交上打对应版本的标签,格式匹配你配置的tag-prefix,比如1.0.0版本就打
v1.0.0标签并推送到远程。如果用Azure DevOps Pipeline做PR合并,可以加一个脚本步骤自动打标签,不需要手动操作。打完标签后GitVersion在main分支会直接识别标签作为基线,输出正确的1.0.0版本。 - 调整GitVersion配置:把main分支下的
prevent-increment-of-merged-branch-version参数值改为false,这样合并release分支时,GitVersion会直接继承release分支的版本作为计算基础,不会回退到初始版本。注意改完后如果main分支在合并后有新的提交,会按照你配置的increment: Patch规则自动累加补丁版本号。
验证方式
本地切到合并后的main分支,在仓库根目录执行命令输出诊断日志,可以直接看到版本计算的全链路逻辑:
dotnet gitversion /diag
在输出日志里搜索BaseVersion条目,如果显示基础版本来源是Fallback base version,就可以确认是找不到版本基线导致的0.1.0问题。
内容的提问来源于stack exchange,提问作者dna
相关产品推荐
相关产品推荐

