如何让release-it在CHANGELOG.md中避免提交记录重复?
解决release-it生成CHANGELOG时提交记录重复的问题
使用release-it结合@release-it/conventional-changelog生成CHANGELOG.md时,出现提交记录在多个版本下重复的问题(例如提交80e627c同时出现在1.2.0和1.1.0版本的记录中),期望每个提交仅归属对应版本,无重复记录。
复现步骤
mkdir ri && cd ri && npm init -y && git init echo "node_modules" > .gitignore npm i -D release-it @release-it/conventional-changelog npm init release-it
配置信息(package.json)
"release-it": { "git": { "commitMessage": "chore: release ${version}" }, "github": { "release": true }, "npm": { "publish": false }, "plugins": { "@release-it/conventional-changelog": { "infile": "CHANGELOG.md", "preset": { "name": "conventionalcommits", "type": [ { "type": "feat", "section": "Features"}, { "type": "fix", "section": "Bug Fixes"} ] } } } }
测试命令(原导致重复的命令)
git add . && git commit -m "feat: add release it changelog generation" npx release-it --no-git touch extra-file git add . && git commit -m "feat: add commit linting" npx release-it --no-git --debug
问题原因
使用--no-git参数会跳过release-it的git相关操作(包括创建版本tag、提交release记录),而@release-it/conventional-changelog插件依赖git tag来划分不同版本对应的提交范围。没有版本tag作为边界时,每次生成CHANGELOG都会包含从项目初始到当前HEAD的所有符合条件的提交,导致旧提交重复出现在新版本的记录中。
解决方案
方法1:移除--no-git参数(推荐)
让release-it自动创建版本tag,插件会基于tag准确划分每个版本的提交范围:
# 第一次发布 git add . && git commit -m "feat: add release it changelog generation" npx release-it # 第二次发布 touch extra-file git add . && git commit -m "feat: add commit linting" npx release-it --debug
执行后,release-it会为每个版本创建对应的git tag(如v1.1.0、v1.2.0),CHANGELOG中每个提交只会归属到对应的版本下。
方法2:手动指定版本范围(仅当必须使用--no-git时)
如果不需要git tag,需在配置中添加ignoreRecommendedBump: true,并每次发布手动指定版本:
- 修改package.json中的插件配置:
"@release-it/conventional-changelog": { "infile": "CHANGELOG.md", "ignoreRecommendedBump": true, "preset": { "name": "conventionalcommits", "type": [ { "type": "feat", "section": "Features"}, { "type": "fix", "section": "Bug Fixes"} ] } }
- 手动指定版本发布:
# 第一次发布为1.1.0 git add . && git commit -m "feat: add release it changelog generation" npx release-it --no-git --version 1.1.0 # 第二次发布为1.2.0 touch extra-file git add . && git commit -m "feat: add commit linting" npx release-it --no-git --debug --version 1.2.0
这种方式需要手动管理版本号,容易出错,仅在特殊场景下使用。
内容的提问来源于stack exchange,提问作者Ole
相关产品推荐
相关产品推荐

