目的
- 在使用 git bisect 时可以忽略不重要的提交(如格式调整)
- 在浏览历史记录时提供更清晰的信息
WARNING
此规范适用于所有 Quasar 仓库。
精心维护的提交日志是一件既美观又实用的事情。git blame、revert、rebase、log、shortlog 等子命令会因此变得真正有用。审查他人的提交和 pull request 将变得有价值,并且可以独立完成。追溯几个月甚至几年前某个改动的原因,不仅成为可能,而且高效。
优秀 Git 提交信息的规则
- 用空行将主题与正文分开
- 主题行限制在 70 个字符以内
- 主题行首字母大写
- 主题行末尾不加句号
- 主题行使用祈使语气
- 正文每行不超过 80 个字符
- 正文用来说明"是什么"和"为什么",而不是"怎么做"
提交信息格式
type(<scope>): <Subject> #<github-ref-id>
<body>
<footer>content_paste
提交信息示例
fix(ui): Ensure Range headers adhere more closely to RFC 2616 #2310
To add new dependency use `range-parser`to compute the range.
It is more well-tested in the wild.
BREAKING CHANGE:
port-runner command line option has changed to runner-port.
To migrate your project, change all the commands,
where you use --port-runner to --runner-port.content_paste
信息主题(第一行)
第一行不能超过 70 个字符,第二行始终为空行。type 和 scope 应始终使用小写,如下所示。
允许的 <type> 值:
- feat - 面向用户的新功能,不是构建脚本的新功能
- fix - 面向用户的 bug 修复,不是构建脚本的修复
- docs - 仅文档变更
- style - 不影响代码含义的变更(空格、格式化、缺少分号等)
- refactor - 重构生产代码,既不修复 bug 也不添加功能的代码变更
- chore - 不修改 src 或 test 文件的其他变更(不涉及生产代码变更),以及依赖更新
- perf - 提升性能的变更
- revert - 回退之前的提交
- test - 添加缺失的测试、重构测试;不涉及生产代码变更
- build - 影响构建系统或外部依赖的变更(如
ui/build/*) - ci - 持续集成配置文件和脚本的变更(如 GitHub Actions)
<scope> 值示例:
- 目录/包相关:ui、cli、app-webpack、app-vite 等
- 功能相关:api、TouchSwipe、QTime 等
TIP
<scope> 可以包含多个值,用 & 分隔。例如:feat(app-vite&app-webpack): Add Capacitor mode。
<scope> 可以为空(例如全局性的变更),此时省略括号。例如:style: Use semicolons
信息正文
- 使用祈使句、现在时:“change” 而不是 “changed” 或 “changes”
- 说明变更的动机,并与之前的行为进行对比
信息页脚
破坏性变更
所有破坏性变更都必须在页脚中以 BREAKING CHANGE 块的形式说明,该块应以 BREAKING CHANGE: 开头,后跟一个空格或两个空行。提交信息的其余部分则是变更的描述、理由和迁移说明。
BREAKING CHANGE: isolate scope bindings definition has changed and
the inject option for the directive controller injection was removed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
myBind: 'bind',
myExpression: 'expression',
myEval: 'evaluate',
myAccessor: 'accessor'
}
After:
scope: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - usually not useful, but in cases where the expression is assignable, you can use '='
myAccessor: '=' // in directive's template change myAccessor() to myAccessor
}content_paste
引用 Issue
已关闭的 issue 应在页脚中单独列出一行,以 “Closes” 关键字为前缀,如下所示:
Closes #234
如果涉及多个 issue:
Closes #123, #245, #992