[TOC]
# git commit 提交规范 & 规范校验
## Git Log 之痛
在《The Art of Readable Code》这本经典书中,有个形象的比喻,衡量代码可读性的指标是阅读代码时每分钟的 WTF 次数,而在读 Git 提交历史的时候,不知道你有多少次爆粗口?不相信?你现在打开公司演进最快的项目,执行 git log,信息量过少甚至是误导的 commit message 非常常见,比如:
```
fix => 这到底是 fix 什么?为什么 fix?怎么 fix 的?
update => 更新了什么?是为了解决什么问题?
test => 这个最让人崩溃,难道是为了测试?至于为了测试而去提交一次代码么?
```
说不定,你在这种 commit message 中也贡献了一份力量呢。
## 修改git message默认编辑器
说了这么多写作规范,如果有个模板可以直接拷贝,是再好不过的。
可以把默认编辑器改成 vim:
```
git config –global core.editor vim
```
## commit messages 模板
```
curl https://gist.githubusercontent.com/keniushadu/5c7de811bfd77c4cd9c5cd981d401d0d/raw/e048f777bd690767c13544b63f936c1a3219da5e/commit-msg.txt >> ~/.git-commit-template.txt
```
标准模板内容:
```
# Type(<scope>): <subject>
# <body>
# <footer>
# type 字段包含:
# feat:新功能(feature)
# fix:修补bug
# docs:文档(documentation)
# style: 格式(不影响代码运行的变动)
# refactor:重构(即不是新增功能,也不是修改bug的代码变动)
# test:增加测试
# chore:构建过程或辅助工具的变动
# scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等。
# subject是 commit 目的的简短描述,不超过50个字符
# Body 部分是对本次 commit 的详细描述,可以分成多行
# Footer用来关闭 Issue或以BREAKING CHANGE开头,后面是对变动的描述、
# 以及变动理由和迁移方法
# 英文版详细例子,请看这里
# https://github.com/sparkbox/how_to/tree/master/style/git
# 中文版介绍,请看这里
# http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html
```
```
git config --global commit.template ~/.git-commit-template.txt
```
## 简单模板内容
```
如 xxx_template文件,其内容如下:
[需求/BUG]:
[模块]:
[说明]:
```
## 注意
a、`git commit` 之前先要使用 `git add` 将没有入库的代码入库
b、可以使用 `git add -a` 提交多个代码文件
5、在 `git commit` 之后,会以设置的编辑器打开模板文件,然后按照格式修改该文件,并保存
> 与团队成员约定做 git 提交时使用 `git commit`,不能直接用 `git commit -m` 跳过规范。
## 规范校验
在多人协作项目中,如果代码风格统一、代码提交信息的说明准确,那么在后期协作以及Bug处理时会更加方便。
因此,在本文章中,我会介绍怎么使用下面这个工具,在 `git push` 代码之前检测 `commit messages`:
* [commitlint
](https://commitlint.js.org/)
* husky
# Refs
[Semantic Release with Lerna and Conventional Commits](https://michaljanaszek.com/blog/lerna-conventional-commits)
[GitHub中使用 issues 模版和 pull request 模版](https://www.jianshu.com/p/39e7e3c0a43f)
[About issue and pull request templates](https://help.github.com/en/articles/about-issue-and-pull-request-templates)
[Commit message 和 Change log 编写指南](http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html)
[你可能已经忽略的git commit规范](https://zhuanlan.zhihu.com/p/100574040)
- 介绍
- 1. Get Git - 安装并且设置Git
- 2. Repository - 建立一个本地的repository
- 3. Commit to it - 检查状态、新增或修改commits
- 4. GitHubbin - 注册GitHub帐号
- 5. Remote Control - 将repository做本地和远程的连接
- 6. Forks and Clones - Fork和clone一个开源的计划
- 7. Branches aren't just for Birds - 建立一个feature branch
- Git分支开发模型
- 8. It's a Small World - 邀请并和别人合作
- 9. Pull, Never Out of Date - 利用Push和pull来和GitHub.com同步
- 10. Requesting You Pull Please - 建立一个pull request
- 11. Merge Tada - Merge和删除branches
- 学会 GitHub
- GitHub 使用指南
- git 与 github 模板配置
- GitHub Actions
- 实用技巧
- Git Flow
- Submodule子模块
- 工作记录
- 常用命令
- 帮助
- 资源
- 解疑答惑