共计 1840 个字符,预计需要花费 5 分钟才能阅读完成。
目前很多项目都是通过 Git 进行管理的,Git 每次提交代码的过程中 提交说明 commit message 是必须的。但仅仅必须是不够的,好的提交说明可以帮助我们提高项目的整体质量。
作用与优点
提交说明最首要的目的是帮助 提交者 说明本次提交的目的,而规范的说明信息有几个好处。
- 提供完整的信息,帮忙快速定位问题
- 过滤某些 commit,快速查找有用信息
- 直接从 commit 信息生成 Change log
- 加快 Code Review 的过程
基本要求
- 第一行应该少于 50 个字。随后是一个空行
- 永远不在
git commit
上增加-m <msg>
或者--message=<msg>
参数,而需要单独写提交信息
好的提交说明要包含下面的内容:
- 为什么要提交这次修改?
- 怎么解决的问题?
- 可能影响哪些内容?
Angular 规范 CommitMsg 格式
Angular 主要有三个格式,其中 Head 是必须的,body 和 footer 是可选的。
# head: <type>(<scope>): <subject>
# - type: feat, fix, docs, style, refactor, test, chore
# - scope: can be empty (eg. if the change is a global or difficult to assign to a single component)
# - subject: start with verb (such as 'change'), 50-character line
#
# body: 72-character wrapped. This should answer:
# * Why was this change necessary?
# * How does it address the problem?
# * Are there any side effects?
#
# footer:
# - Include a link to the ticket, if any.
# - BREAKING CHANGE
#
Header
其中 type 用来说明 commit 的类别,只允许使用下面的 7 个标识。
- feat 新功能
- fix 修补 bug
- docs 文档
- style 格式
- refactor 重构
- test 增加测试
- chore 构建过程、辅助工具
- perf 提高性能
如果 type 为 feat 和 fix,则该 commit 信息将肯定出现在 change log 之中。
scope 用于说明 commit 影响的范围,比如影响哪一层、哪个包中的内容或者使用哪些方案的实例。
subject 是关于 commit 信息的简短描述,不超过 50 个字。
Body
Body 部分是针对本次 commit 的详细描述,可以多行,要表达清楚变动的动机、与之前行为的对比。
Footer
用于不兼容变动和关闭 Issue。
使用 gitemoji 进行美化
虽然纯文字的提交说明已经非常明确了,但是却比较单调,而且在一些内容上感觉少了一些步骤,于是在现有的内容上进行少量的修改以更美观的清晰。
type 主要将原来的 chore 进行了拆分,增加了 ci 和 review 两个内容,用来补充项目开发过程中的流程。其它的还有一些内容,可以参照 gitemoji。
-
feat 新功能
:sparkles:
✨ -
fix 修补 bug
:bug:
???? -
docs 文档
:memo:
???? -
style 格式
:art:
???? -
refactor 重构
:recycle:
♻ -
test 增加测试
:white_check_mark:
✅ -
ci 持续集成
:construction_Worker:
???? -
review 完成 review
:ok_hand:
???? -
perf 提高性能
:zap:
⚡
相关工具
- commitizen 撰写合格的 Commit Message 的工具
- commitlint 检查 Commit Message 是否符合格式的工具
- conventional-changelog 生成 Change log 的工具
- gitmoji 美化 Commit Message 的工具
其它
使用 git log 查询的时候,看到的内容比较简单,可以通过下面的命令将信息格式化输出。
alias lg="git log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(red)%h%C(r) —— %C(bold blue)%an%C(r): %C(white)%s%C(r) %C(dim white) %C(bold green)(%ar)%C(r) %C(bold yellow)%d%C(r)'--all"
使用命名查询的效果如下:
文章首发于:https://www.zucchiniy.cn
正文完