HomeAuthorContactSearch

Git - 优雅地commit

Git不仅仅是储存代码,多人协同开发的工具。即使某个项目只有一个开发者,Git对他来说也至关重要。正确地使用Git,优雅地使用Git,对自己和他人都有重要的意义。基础就不多赘述了。
廖雪峰 & Git-Flow

何时commit

commit不能太频繁, 一个功能写到一半,或者新增的文件存在语法语法错误,甚至你的commit会导致整个项目编译失败。也不能太久commit一次,一个commit新增/修改了千行代码,合并分支时可能会出现百十个merge request。
总的来说,确保完成某个独立需求后即可提交,合理利用暂存区加快开发效率。

怎么写commit message

社区提出了很多规范,认可程度较高的是受Angular启发的约定式提交(conventional commit)。也衍生出了很多工具可以帮助开发者快速写出符合规范的message。使用统一的提交规范不仅可以提高其他开发者code review的效率,还可以自动构建CHANGELOG等

使用commitizen代替git commit

cz可以作为独立的命令行工具使用(详细的使用方法见文档),也可以集成在Node.js项目中
添加cz工具与约定式提交的adapter

$ yarn add commitizen cz-conventional-changelog -D
// package.json
...
  "config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
  }

添加脚本方便使用

  // package.json
  ...
  "scripts": {
    "commit": "git-cz"
  }

接下来,只要使用项目命令commit即可触发cz的commit trigger

$ yarn commit
# or
$ npm run commit

校验commit message

一次不符合规范的commit如果push至远程仓库,再想撤回会比较麻烦。为了防止开发者写(xia)错(xie), 我们还需要一个工具来校验。推荐commitlint和对应的约定式提交adapter(@commitlint/config-conventional).

$ yarn add @commitlint/config-conventional @commitlint/cli -D
// package.json
...
"commitlint":{
  "extends": ["@commitlint/config-conventional"]
}

接下来只要将commitlint命令添加至githook/commit-msg即可

使用哈士奇

$ yarn add husky -D
// package.json
{
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }  
  }
}

vue-cli@3.x创建的项目可以直接在package.json内配置githook

...
"gitHooks": {
    "commit-msg": "commitlint -e $GIT_PARAMS",
 },