关于Git commit

git commit 的重要性

当你学会使用git,并在GitHub上创建了本身的Repositories时。git

嗯。能够push本身的代码了,一顿github

  1. git pull origin master
  2. git add .
  3. git commit -m"balabala"
  4. git push origin master

看到100%以后开心极了。几个月后看到以下npm

请问上传的注册页面在哪里呢???想必你也内心充满了疑虑,我到底放在哪一个里面的??

因而可知git add和git commit并非很简单的一次所有完成的json

正确的使用git add 和 git commit

当你每次push的时候,必定是更新了一些代码,完善了一些功能。markdown

例如:架构

1. 注册功能
2. 登陆功能
3. 完善了README
复制代码

那么该如何的push此次代码呢??框架

  1. 提交注册功能的功能代码
git add src/register
    git commit -m"add register function"
复制代码
  1. 提交登陆功能的代码
git add src/login
    git commit -m"add login function"
复制代码
  1. 提交完善的README
git add READM.md
    git commit -m"modify README"
复制代码

作完以上以后,你就能够正常的工具

git push origin mater
复制代码

固然,这样只是一个简单push测试

进一步的规范你的git commit

你觉得作到上面这些你就能够完成规范的git commit 了吗??优化

太天真你,通常规范的commit须要由三部分构成

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
复制代码

其中,Header 是必需的,Body 和 Footer 能够省略。

不论是哪个部分,任何一行都不得超过72个字符(或100个字符)。这是为了不自动换行影响美观。

1.Header

Head这部分只有一行,可是包括三个部分

< type >(必需)< scope >(可选)< subject >(必需)

(1) < type >

type用来讲明commit的类别,也就是说别人看了你的type就知道你此次push的性质是什么,只容许有如下几种标识

  • init: 初始化项目,每每用于仓库刚刚创建,建好项目框架以后的一次push
  • feat: 新功能(feature)
  • docs: 文档的提交(document)
  • fix: 修补bug
  • style: 格式的改动(不影响代码运行的变更,每每是规范了代码的格式)
  • refactor: 重构(既不增长新功能,也不改任何的bug)
  • test: 增长测试
  • chore: 构建过程或辅助工具的变更
  • opt: 优化和改善,好比弹窗进行确认提示等相关的,不会改动逻辑和具体功能等
  • other: 用于难以分类的类别(不建议使用,但一些如删除没必要要的文件,更新.ignore之类的可使用)

      若是type为feat和fix,则该 commit 将确定出如今 Change log 之中。其余状况(docs、chore、style、refactor、test)由你决定,要不要放入 Change log,建议是不要。

(2) < scope >

scope用于说明commit的影响范围,好比数据层,控制层,视图层等

      (可选)类型后面能够加上括号,括号内填写主要变更的范围,好比按功能模块分,某模块;或按项目三层架构模式分,分数据 层、控制层之类的。

#:表示模块
#student --> 表示 学生模块 (具体的模块开头字母小写,驼峰命名)
#ALL --> 表示 全部模块 (特殊含义如ALL表全部,MOST表大部分,用大写字母表示)
#MOST --> 表示 大部分模块
复制代码

e.g. feat(#student): 新增添加学生的功能 —— 表示student模块新增功能,功能是添加学生

(3)< subject >

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

- 以动词开头,使用第一人称如今时,好比change,而不是changed或changes
- 第一个字母小写
- 结尾不加句号(.)
复制代码

2. Body

body部分是对本次commit的详细描述,能够分红多行进行描述能够分红多行,正文在 72 个字符处换行。

使用正文解释是什么(what)和为何(why),而不是如何作,以及与之前行为的对比。

因而能够这样写:

balabala : balabala

what:
balabala

why:
balabala
复制代码

3. Footer

Footer只用于两种状况

(1)不兼容变更

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

BREAKING CHANGE: isolate scope bindings definition has changed.

To migrate the code follow the example below:

Before:

scope: {
  myAttr: 'attribute',
}

After:

scope: {
  myAttr: '@',
}

The removed `inject` wasn't generaly useful for directives so there should be no code using it.
复制代码

(2)关闭 Issue

若是当前 commit 针对某个issue,那么能够在 Footer 部分关闭这个 issue 。

Closes #234
复制代码

也能够一次关闭多个 issue 。

Closes #123, #245, #992
复制代码

4. Revert

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

revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
复制代码

Body部分的格式是固定的,必须写成This reverts commit <hash>.,其中的hash是被撤销 commit 的 SHA 标识符。

若是当前 commit 与被撤销的 commit,在同一个发布(release)里面,那么它们都不会出如今 Change log 里面。若是二者在不一样的发布,那么当前 commit,会出如今 Change log 的Reverts小标题下面。

几个优秀的撰写合格的commit的工具

1. Commitizen

Commitizen是一个撰写合格 Commit message 的工具。

安装命令以下。

$ npm install -g commitizen
复制代码

而后,在项目目录里,运行下面的命令,使其支持 Angular 的 Commit message 格式。

$ commitizen init cz-conventional-changelog --save --save-exact
复制代码

之后,凡是用到git commit命令,一概改成使用git cz。这时,就会出现选项,用来生成符合格式的 Commit message。

2. validate-commit-msg

validate-commit-msg 用于检查 Node 项目的 Commit message 是否符合格式。

它的安装是手动的。首先,拷贝下面这个JS文件,放入你的代码库。文件名能够取为validate-commit-msg.js。

接着,把这个脚本加入 Git 的 hook。下面是在package.json里面使用 ghooks,把这个脚本加为commit-msg时运行.

"config": {
  "ghooks": {
    "commit-msg": "./validate-commit-msg.js"
  }
}
复制代码

而后,每次git commit的时候,这个脚本就会自动检查 Commit message 是否合格。若是不合格,就会报错。

$ git add -A 
$ git commit -m "edit markdown" 
INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" ! was: edit markdown
复制代码

3. conventional-changelog

若是你的全部 Commit 都符合 Angular 格式,那么发布新版本时, Change log 就能够用脚本自动生成。

生成的文档包括如下三个部分。

- New features
- Bug fixes
- Breaking changes.
复制代码

每一个部分都会罗列相关的 commit ,而且有指向这些commit的连接。固然,生成的文档容许手动修改,因此发布前,你还能够添加其余内容。

conventional-changelog 就是生成 Change log 的工具,运行下面的命令便可。

$ npm install -g conventional-changelog
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -w
复制代码

上面命令不会覆盖之前的 Change log,只会在CHANGELOG.md的头部加上自从上次发布以来的变更。

若是你想生成全部发布的 Change log,要改成运行下面的命令。

$ conventional-changelog -p angular -i CHANGELOG.md -w -r 0
复制代码

为了方便使用,能够将其写入package.json的scripts字段。

{
  "scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
  }
}
复制代码

之后,直接运行下面的命令便可。

$ npm run changelog
复制代码

(完)

以上内容仅表明做者本身的我的观点,欢迎广大专业人士提出建议

Thank You!!

相关文章
相关标签/搜索