优雅地提交 Git Commit Message
Why
如果在版本回退的时候看到一大段完全不知所云的 Commit,大概会是一种非常糟心的体验。而规范的提交后,只需要看标识符就可以明白提交的目的。
方便浏览
提供更多的信息,方便排查与回退
git log HEAD --pretty=format:%s
便于查找
过滤关键字,迅速定位
# 查找新增功能
git log HEAD --grep feat
Git Commit 规范
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
Header
Header 仅有一行,包含三个字段
- type(必需):用于说明 commit 的类别
- scope(可选):用于说明 commit 影响的范围,比如数据层、控制层、视图层等,视项目不同而不同
- subject(必需):commit 目的的简短描述
- 首字母不大写
- 末尾不要标点
- 以动词开头,使用第一人称现在时,比如 change,而不是 changed 或 changes
type 只允许使用下面 7 个标识
- feat:新功能(feature)
- fix:修复 bug
- docs:文档(documentation)
- style: 格式(不影响代码逻辑)
- refactor:重构(既不是新增功能,也不是修改 bug 的- 代码变动)
- test:增加测试(单元测试、集成测试)
- chore:构建过程或辅助工具的变动
- revert:回滚到某一个版本
Body
Body 是对本次 commit 的详细描述,可分成多行。应说明代码变动的动机,以及与以前功能的对比。
Footer
该部分用于两种情况:
- 不兼容的变动:与上一个版本不兼容,则 Footer 部分以 BREAKING CHANGE 开头
- 关闭 Issue:commit 针对某个 issue,在 Footer 中可以写上 Closes #123
特殊情况 Revert
有一种特殊情况,如果当前 commit 用于撤销以前的 commit:
必须以 revert: 开头,后面跟着被撤销 commit 的 Header
Body 部分的格式是固定的,必须写成 This reverts commit <hash>.
hash 为被撤销 commit 的 SHA 标识符
好的格式
50-character subject line
72-character wrapped longer description. This should answer:
- Why was this change necessary?
- How does it address the problem?
- Are there any side effects?
Include a link to the ticket, if any.
Add co-authors if you worked on this code with others:
Co-authored-by: Full Name email@example.com
Co-authored-by: Full Name email@example.com
Git 分支与版本发布规范
基本原则
master 为保护分支,不直接在 master 上进行代码修改和提交。
日常开发
从 master 分支上 checkout 一个 feature 分支进行开发或者 bugfix 分支进行 bug 修复,功能测试完毕并且项目发布上线后,将 feature 分支合并到主干 master,并且打 Tag 发布,最后删除开发分支。
分支命名规范
分支类型_分支发布时间_分支功能。
比如:feature_20191221_git_commit
分支类型包括 feature、bugfix、refactor 三种类型,
时间使用年月日进行命名,不足 2 位补 0。
分支功能命名使用 snake case 命名法。
Tag
Tag 包括 3 位版本,前缀使用 v,比如 v0.1.13
Tag 命名规范
新功能开发使用第 2 位版本号,bug 修复使用第 3 位版本号
核心基础库可以在大版本发布前使用灰度版本号,即在版本后面加上后缀,用中划线分隔。alpha 或者 beta 后面加上次数,即第几次 alpha:
v2.0.0-alpha.1
v2.0.0-beta.2
版本正式发布前需要生成 changelog 文档,然后再发布上线。
规范没有绝对的好坏,只要适合团队和个人就行
好的习惯尽早养成,受益终身
Reference
A Note About Git Commit Messages