前言
Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。
一般来说,Commit message 应该清晰明了,说明本次提交的目的。
目前,社区有多种 Commit message 的写法规范。其中 Angular 规范是目前使用最广的写法。前端框架 Angular.js 项目采用的就是该规范。
格式
每次提交,Commit message 都包括三个部分 header
, body
, footer
|
|
其中,header 是必须的,body 和 footer 可以省略
不管是哪部分,任何一行都不得超过72字符(或100个字符)。这是为了避免自动换行影响美观
Header
Header部分只有一行,包括三个字段:type
(必需)、scope
(可选)和subject
(必需)。
type
用于说明 commit 的类别,约定了两个主要 type,以及五个特殊 type,并 扩充了其他 type。
主要
- feat:新功能(feature)
- fix:修补bug
特殊
- docs:文档(documentation),只改动了文档部分
- style: 格式(不影响代码运行的变动),例如去掉空格、改变缩进
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:添加测试或者修改现有测试
- chore:构建过程或辅助工具的变动
扩充
- build:改变构建流程,新增依赖库、工具、构造工具的或者外部依赖的改动,例如webpack,npm
- perf:提高性能的改动
- ci:自动化流程配置修改、与CI(持续集成服务)有关的改动
- revert:回滚到上一个版本,执行git revert打印的message
- 如果type为
feat
和fix
,则该 commit 将肯定出现在 Change log 之中。- 当一次改动包括 主要type 与 特殊type 时,统一采用 主要type。
scope
scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
如果你的修改影响了不止一个scope
,你可以使用*
代替。
如果没有合适的范围,可以直接写提交内容
subject
subject
是 commit 目的的简短描述,不超过50个字符。
其他注意事项:
- 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
- 第一个字母小写
- 结尾不加句号(.)
Body
Body 部分是对本次 commit 的详细描述,可以分为多行
主要描述 改动之前的情况
及 修改动机
,对于小的修改一般不作要求,但是重大需求、更新等必须添加 body 以作说明
其他注意事项:
- 使用第一人称
- 永远别忘了第2行是空行
- 应该说明代码变动的动机,以及与以前行为的对比
Footer
Tooter 部分只用于以下两种情况:
不兼容变动(break changes)
如果当前代码与上一个版本不兼容,则 footer 部分以 BREAKING CHANGE 开头,后面是对变动的描述、以及变动理由和迁移方法。
|
|
关闭 Issue(affect issues)
如果当前 commit 针对某个issue,那么可以在 Footer 部分关闭这个 issue 。
|
|
示例
对 package.json 文件新增依赖库
|
|
对代码进行重构
|
|
分支与版本发布规范
main 为保护分支,不直接在 main 上进行代码修改和提交
开发从 main 分支上 checkout 一个 feature 分支进行开发或者 fix 分支进行 bug修复,功能测试完毕并且项目发布上线后,将 feature 分支合并到主干 main,并且打 tag 发布,最后删除开发分支。
- 分支版本命名规则:分支类型 _ 分支发布时间 _ 分支功能。例如:feat_20201122_login
- 分支类型包括:
feat
、fix
、refactor
三种类型,即新功能开发、bug修复和代码重构 - 时间使用年月日进行命名,不足2位补0
- 分支功能命名使用snake case命名法,即下划线命名
工具
Idea 可用插件 Git Commit Template