在需要根据本地改动自动完成提交、推送和语义化打标时使用,尤其适用于发布流程要求 CHANGELOG 存在对应版本条目的场景。
该技能用于规范一套完整发布流程:分析当前改动、生成合适提交、推送分支更新、计算下一个语义化版本标签、更新变更日志条目并推送标签。
它适用于通过 v* 标签触发自动发布、且要求 CHANGELOG.md 中必须包含对应 [x.y.z] 版本段落的仓库。
以下场景不建议使用:
执行:
git rev-parse --is-inside-work-tree
git fetch --tags --prune
git status --short
git rev-parse --abbrev-ref HEAD
Rules: 规则:
默认行为:
git add -A
如果用户要求部分发布,只暂存指定路径。
检查已暂存内容:
git diff --cached --name-status
git diff --cached -- .
提交类型判定:
标题格式:
<type>: <short summary of main change>
如果是混合改动,按以下优先级选择最高影响的类型: feat > fix > refactor > docs > chore。
查找最近语义化标签:
git describe --tags --abbrev=0 --match "v[0-9]*.[0-9]*.[0-9]*"
版本基线规则:
版本提升规则:
破坏性变更信号(满足任一即可):
语义化版本计算:
标签格式必须是 v<version>。
检查目标版本条目是否已存在:
git grep -n "^## \[<newVersion>\]" CHANGELOG.md
如果不存在,在当前最上方已发布版本之前新增段落(通常位于 ## [Unreleased] 之后):
## [<newVersion>] - <YYYY-MM-DD>
### Changed
- <auto-generated summary from staged diff>
要求:
将所有已暂存发布改动(代码 + changelog)一起提交:
git commit -m "<type>: <summary>"
git push <remote> <branch>
git tag "v<newVersion>"
git push <remote> "v<newVersion>"
git status --short
git log --oneline --decorate -n 5
git ls-remote --tags <remote>
成功标准:
| 观察到的改动 | 提交类型 | 版本提升 |
|---|---|---|
| 破坏性 API 或行为变更 | feat! 或 refactor! | Major |
| 新增能力 | feat | Minor |
| 仅缺陷修复 | fix | Patch |
| 仅重构/文档/维护 | refactor/docs/chore | Patch |
完成后使用如下固定格式报告:
Release completed.
- Branch: <branch>
- Commit: <sha> <subject>
- Previous tag: <tag or none>
- New tag: v<newVersion>
- Bump reason: <major|minor|patch + why>
- Pushed: branch and tag
- Changelog: CHANGELOG.md includes [<newVersion>]