git提交规范

遇到的问题

  1. 版本回退时无法快速定位到指定版本
  2. 无法知道项目中封版操作是哪一个commit
  3. 无法清晰的知道每次提交的记录

以下是commit提交规范

每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。

其中,Header 是必需的,Body 和 Footer 可以省略。

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>    
12345

Header

Header部分只有一行,包括两个字段:type(必需)和subject(必需)。

type用于说明 commit 的类别,只允许使用下面9个标识。

feat: 新功能(feature)
fix: 修补bug
docs: 文档(documentation)
style: 格式(不影响代码运行的变动)
refactor: 重构(即不是新增功能,也不是修改bug的代码变动)
chore: 构建过程或辅助工具的变动
revert: 撤销,版本回退
perf: 性能优化
test:测试
improvement: 改进
build: 打包
ci: 持续集成
123456789101112

subject是 commit 目的的简短描述,不超过50个字符。

以动词开头,使用第一人称现在时,比如修改/修复/增加 等等
example: 订单详情增加导出功能
12

scope

scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

Body

Body 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。

xxx/xxx.vue  修改内容
xxx/xxx.vue  修改内容
12

Footer

Footer 部分只用于两种情况。

  1. 不兼容变动

如果当前代码与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法。

BREAKING CHANGE: 项目webpack升级到4.0版本
xx插件替换成xx插件
12
  1. 关闭 bug/需求
closes 3056, 11231
1

Revert

还有一种特殊情况,如果当前 commit 用于撤销以前的 commit,则必须以revert:开头,后面跟着被撤销 Commit 的 Header。

revert: feat(pencil): 回退当前版本667ec到 sssee2
1

建议

文档综合了,公司项目git管理的实际情况,在某一些规范上进行了轻微修改,在平时提交fix和feat时,一般使用简写

feat: 增加订单详情  closes xxxx (closes非必需)
fix: 修复xx情况下xx问题  closes xxxx (closes非必需)
docs: 修改md文件
style: 修改订单列表样式
refactor: 重构utils.js下部分方法
chore: 增加xxx插件/xxxxloader
revert: 回退当前版本667ec到 sssee2
perf: 优化了xxx,提高了渲染速度
test:增加测试
improvement: 改进
build: 打包
ci: 持续集成
123456789101112

在某些复杂commit比如 revertchore 等操作时最好在body,footer,描述清楚 遇到了什么问题,为何要这样做

revert: feat(订单模块): 回退当前版本667ec到 sssee2

因为某次提交失误,造成xxx问题
xxx.vue
xxx.js

closes xxx
1234567
chore(项目组件, 项目构建): 增加公用组件库xxx和xxx公用一套组件

为了解决xx问题, 引入公用组件库,使用方式见xx.md文档

git-忽略文件改动不进行提交

命令:git update-index --assume-unchanged 文件名
作用:忽略文件的改动,但是不加入.gitignore 文件中,这样可以达到仅在本地目录中忽略,不影响其他团队成员的工作。

命令:git update-index --no-assume-unchanged 文件名
作用:上一个命令的逆操作,重新追踪文件改动。
便捷用法,编写 shell 脚本,

!/bin/bash
git update-index --assume-unchanged 文件名

把 disable_track.sh 放在项目的.git/hooks 文件夹中(如果需要把脚本加入版本管理分享可以放在别的目录),然后打开 git bash 命令行,执行$ ./.git/hooks/disable_track.sh 即可。
同理建立 enable_track.sh:
!/bin/bash
git update-index --no-assume-unchanged 文件名
做逆向操作。