在日常的研发流程中,git commit message用来描述本次提交的内容,帮助自己回忆,也帮助其他人理解改动。
但是,总有一部分人喜欢随随便便瞎写message,等到别人问为什么改这行代码时,就只能回答“我也不记得了”。久而久之,代码质量就这样垮掉了。
相信每一个人都见过这样的噩梦message:
* 6f01c3 update
* 80ac3f fix
* 11b4f1 1
* 27894f add
commit规范
目前,业界内最流行的commit message规范是约定式提交规范(conventional commits):
<type>(<optional scope>): <subject>
[optional body]
[optional footer(s)]
Type
必填的,用于表示当前提交的意图,使用以下的一项:
feat: 引入功能
fix: 修复问题
build: 涉及构建系统的改动
docs: 只涉及文档的改动
refactor: 代码重构,不涉及问题修复和功能引入
perf: 性能优化
style: 修改代码风格,不影响代码含义;(空格, 格式化, 缺少分号 等)
test: 添加测试 或 修复测试
ci: 修复CI配置和脚本
revert: 回滚之前的提交
chore: 构建过程、工具库的修改;(文档生成工具)
Scope
可选的,用于描述改动的范围。
通常,复杂的项目会被拆分成子目录、包、子模块等组织单元,这些单元可以作为Scpoe的内容;
一些简单的项目可能没有拆分成多个单元,这时可以不填写scope;
Subject
必填的,用于简洁地描述改动,
使用祈使句,现在时;"change" not "changed" nor "changes"
首字母不需要大写
结尾不需要加符号(.)
Body
可选的,用于补充描述改动,和Subject间隔一行;
应当包含修改的原因,关注修改前后的行为差别;
可以描述你对于改动的考虑因素(改动带来的副作用、代码中的坑)
不用描述修改了什么文件;
Footer
可选的,用于描述Breaking Changes、需求/BUG相关的信息;
和Subject/Body间隔一行;
Breaking changes
如果改动不兼容之前的版本,可以使用 BREAKING CHANGE: 标记这是一个Breaking Changes. 比如:
BREAKING CHANGE: refactor to use new APIs, all legacy APIs will be deprecated.
Referencing issues
Footer也可以使用Implements描述实现了某个需求,可以使用Closes描述修复了某个BUG;
可以在关键词之后补充需求/BUG的标题或链接;比如:
Closes #123, #456 Implements #543
你问我支不支持这个规范,我当然支持啊,我当然希望项目都是这样的message。
但是你问我愿不愿意这样写,那我当然不愿意啊,因为写一个这样的commit也太花时间了QAQ。
还是希望有个提交工具可以用,不用每次都自己写。
目前你能搜到的工具都是命令行工具,比如commitizen、cz-conventional-changelog、commitlint、husky。个人感觉命令行工具使用起来还是太原始了,不如GUI工具,比如Easy Commit。
Easy Commit
Easy Commit是一款开源的桌面软件,用来提交规范的commit message。
GitHub - 0renlyhuang/EasyCommit: A desktop app for conventional commits.
Easy Commit是基于Git Hooks原理实现的,支持PC、MacOS、Linux。
这个软件还是MIT License的,可以随便用。
按照步骤选择好Git目录后,每次执行git commit -m,Easy Commit都会被拉起,在软件内就可以提交规范的git message了。
就一句话,好用!Star支持!