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

Nestjs集成standard-version合并分支后CHANGELOG缺失提交问题

问题原因分析

standard-version 默认依赖conventional-changelog解析提交历史,但如果用 GitHub 默认的「创建合并提交」方式合并分支,分支里的规范提交会被包裹在一个单独的合并提交中。默认配置下,工具只会遍历当前分支的直接提交节点,不会递归解析合并提交里的子提交;如果合并提交的信息不符合 conventional commit 规范(比如只是默认的Merge branch 'feat/xxx' into main),工具只会把这个合并提交当成普通提交处理,分支里的feat/fix等规范提交完全不会被扫描到。

解决方案

1. 调整分支合并方式

推荐使用以下两种合并方式,让分支提交直接进入 main 历史:

  • Rebase and merge:将分支的提交逐个应用到最新的 main 分支上,保留每个独立的规范提交,适合需要完整提交历史的场景。
  • Squash and merge:把分支所有提交压缩成一个符合规范的提交(手动编辑提交信息为feat(controller): Add new controller and update logic这类格式),这样 standard-version 能识别这个压缩后的提交,CHANGELOG 会显示一条汇总信息。

2. 修改 standard-version 配置解析合并提交

如果必须保留合并提交,可以在package.json里添加配置,让工具解析合并提交的子提交:

{
  "standard-version": {
    "changelog": {
      "preset": "angular",
      "parserOpts": {
        "mergePattern": "^Merge branch '(.*)' into (.*)$",
        "mergeCorrespondence": ["branchName", "targetBranch"]
      }
    }
  }
}

同时建议把合并提交的信息改成符合规范的格式,比如feat(controller): Merge branch 'feat/new-controller',提升工具识别率。不过这种方式兼容性不如调整合并方式稳定。

3. 分支合并前预生成 CHANGELOG

在开发分支完成后,先在分支上执行npx standard-version生成版本和 CHANGELOG,再合并到 main 分支,避免合并后提交历史被遮挡的问题。

适配 NestJS 的替代工具

1. NestJS CLI + conventional-changelog-cli

NestJS 官方 CLI 自带版本管理命令,配合常规变更日志工具完全适配生态:

  • 安装依赖:npm install -D conventional-changelog-cli
  • 在package.json添加脚本:
    {
      "scripts": {
        "release": "conventional-changelog -p angular -i CHANGELOG.md -s && nest version patch"
      }
    }
    
    执行npm run release即可生成 CHANGELOG 并升级版本,angular预设和你之前的规范完全匹配。

2. release-it

灵活度更高的版本管理工具,支持 conventional commits,自定义配置友好:

  • 安装:npm install -D release-it @release-it/conventional-changelog
  • 在package.json添加配置:
    {
      "release-it": {
        "git": {
          "commitMessage": "chore: release v${version}",
          "tagName": "v${version}"
        },
        "plugins": {
          "@release-it/conventional-changelog": {
            "preset": "angular",
            "infile": "CHANGELOG.md"
          }
        }
      }
    }
    
    执行npx release-it就能自动生成 CHANGELOG、打标签、提交变更,支持交互式或全自动化运行。

3. semantic-release

自动化程度拉满的 CI/CD 专属工具,完全基于 GitHub Actions 运行,无需本地操作:

  • 安装依赖:npm install -D semantic-release @semantic-release/git @semantic-release/changelog
  • 在 GitHub Actions 工作流中配置后,它会自动识别规范提交、生成 CHANGELOG、打标签,甚至可以自动发布到 npm(如果需要),适合纯自动化的发布流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:43:24