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

为何@semantic-release/commit-analyzer会分析所有分支提交?

问题:semantic-release为何分析所有提交而非仅master分支?

我的配置文件(.releaserc.yml)

plugins:
  - "@semantic-release/commit-analyzer"

branches:
  - "master"

Git提交日志

*   224400b (HEAD -> master) fix: merge-1
|
| * a28d643 (dev) commit-3
| * d7b35be commit-2
| * ee711df commit-1
|
* b2b696e .gitignore
* 970faff (origin/release, origin/master, origin/HEAD) initial commit

执行semantic-release后的日志

[12:44:27 PM] [semantic-release] › ℹ  Start step "analyzeCommits" of plugin "@semantic-release/commit-analyzer"
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  Analyzing commit: fix: merge-1
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  The release type for the commit is patch
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  Analyzing commit: commit-3
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  The commit should not trigger a release
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  Analyzing commit: commit-2
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  The commit should not trigger a release
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  Analyzing commit: commit-1
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  The commit should not trigger a release
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  Analyzing commit: .gitignore
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  The commit should not trigger a release
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  Analyzing commit: initial commit
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  The commit should not trigger a release
[12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ  Analysis of 6 commits complete: patch release
[12:44:27 PM] [semantic-release] › ✔  Completed step "analyzeCommits" of plugin "@semantic-release/commit-analyzer"

原因解释

这是因为branches配置的作用是指定允许触发发布流程的分支,而非限制提交分析的范围。

semantic-release默认会分析从上次发布的标签(首次发布则从初始提交开始)到当前HEAD的所有可达提交——你把dev分支合并到master后,dev上的commit-1、commit-2、commit-3都属于master分支提交历史的一部分(从初始提交到当前HEAD的路径包含这些提交),所以会被纳入分析。

不过你也能看到,只有符合语义化提交规范的fix: merge-1被判定为触发patch版本更新,其他不符合规范的提交都被标记为不触发发布,最终还是只基于有效提交生成版本。

如果想避免分析合并进来的非规范提交,要么在合并时使用 squash 合并(把dev的多个提交压缩成一个符合规范的提交后再合并到master),要么调整@semantic-release/commit-analyzer的配置,通过ignore规则过滤掉不符合格式的提交,但本质上只要提交在当前分支的历史链里,就会被扫描到。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:11:03