Git修改commit提交信息

当进行一次commit提交的时候,可以附带简短的信息说明,代码如下:

$ commit -m "蚂蚁部落提交"

在-m命令后面跟着的”蚂蚁部落提交”就是commit提交信息。
提交信息可以修改,代码实例如下:

$ git commit --amend -m "c3"

但是上述命令只能修改最后一次commit提交的信息。
更多内容可以参阅 (http://www.softwhy.com/article-8492-1.html) 用法详解一章节。
如果想要修改其他commit提交信息可以使用如下命令:

$ git rebase -i

首先看一下提交历史,代码如下:

$ git log --oneline

代码运行效果截图如下:

未分类

下面开始使用git rebase -i命令,代码如下:

$ git rebase -i b0aa963

特别说明:
(1).b0aa963用来确定commit范围,表示从此提交开始到当前的提交。
(2).并不包括b0aa963提交。
运行此命令后,弹出VIM编辑器,关于编辑器的基本操作参阅git Vim编辑器输入内容、保存和退出操作一章节。

截图如下:

未分类

截图说明:
(1).顶部的commit提交排列顺序与git log排列相反,最先提交的在最上面。
(2).前面的pick表示保留此次commit提交不做修改。
(3).底部红框给出所有可用的命令。
假如要修改4f66476提交的commit信息,代码如下:

未分类

将pick改为reword(负责修改commit信息),然后保存并退出,之后再一次弹出VIM编辑器:

未分类

在对应的地方修改,然后退出保存即可,然后给出如下反馈信息:

未分类

现在看一下提交历史,代码如下:

$ git log --oneline

代码运行效果截图如下:

未分类

一.修改提交信息的影响:

(1).当前提交的sha-1值改变:
虽然仅仅修改了commit的提交信息,但是由于sha-1的计算方式决定,它的sha-1也将会被修改。
(2).其后的提交的sha-1值改变:
它后面的commit的sha-1值也会改变,因为后面的commit对象有一个指针是指向前面commit,既然前面commit的sha-1值改变了,那么这个指针也会发生变化,根据sha-1的计算原则,后面的commit的sha-1值都会改变。

二.取消修改:

如果你还记得在修改之前,最后一次commit提交的sha-1值,应用如下代码即可:

$ git reset 04a540f --hard

如果忘记sha-1值,那么可以采用如下代码:

$ git reset ORIG_HEAD --hard

关于ORIG_HEAD可以参阅Git ORIG_HEAD用法 (http://www.softwhy.com/article-8502-1.html) 介绍一章节。

团队合作必备的Git操作

编辑器&Mac

1、编辑器的使用vs code

  • 插件
    • git辅助工具,可查看代码的书写者:Git Blame

2、 Mac工具使用

  • 强大终端 item2

3、在 macOS 中完美配置文件名大小写敏感(解决git默认对大小写不敏感问题)解决git大小写不敏感

知识篇

一、git使用

  • 一般企业中使用代码管理工具Git开发时都是通过拉分支进行功能细致开发,所以掌握git的分支操作时必要的
  • 使用Git下载指定分支命令为:git clone -b 分支名仓库地址
  • 初始开发git操作流程
    • 本地创建公钥ssh-keygen -t rsa -C “邮箱”并配置
    • 克隆最新主分支项目代码git clone 地址
    • 创建本地分支git branch 分支名
    • 查看本地分支git branch
    • 查看远程分支git branch -a
    • 切换分支git checkout 分支名(一般修改未提交则无法切换,大小写问题经常会有,可强制切换git checkout 分支名 -f非必须慎用)
    • 将本地分支推送到远程分支git push <远程仓库> <本地分支>:<远程分支>

必备知识点

概念:

未分类

  • Remote:远程主仓库;
  • Repository:本地仓库;
  • Index:Git追踪树,暂存区;
  • workspace:本地工作区(即你编辑器的代码)

一般操作流程:《工作区》-> git status查看状态 -> git add .将所有修改加入暂存区-> git commit -m “提交描述”将代码提交到本地仓库->git push将本地仓库代码更新到远程仓库

1、git remote

  • 为远程仓库指定别名,以便于管理远程主机,默认只有一个时为origin
  1. 查看主机名:git remote
  2. 查看主机名即网址:git remote -v
    默认克隆远程仓库到本地时,远程主机为origin,如需指定别名可使用git clone -o <别名> <远程git地址>

  3. 查看主机的详细信息git remote show <主机名>

  4. 添加远程主机git remote add <主机名> <网址>
  5. 删除远程主机git remote rm <主机名>
  6. 修改远程主机的别名:git remote rename <原主机名> <新主机名>

2、git fetch

  • 将某个远程主机的更新,全部/分支 取回本地(此时之更新了Repository)它取回的代码对你本地的开发代码没有影响,如需彻底更新需合并或使用git pull
  1. 远程主机的更新,全部取回本地git fetch <远程主机名>;
  2. 将远程仓库特定分支更新到本地git fetch <远程主机名> <分支名>
  • 如果需要将更新拉取但本地工作代码需要合并到本地某一分支git merge <被合并的远程分支>或者在此基础上创建出新分支并切换git checkout -b <分支名> <在此分支上创建>

3、git pull

  • 拉取远程主机某分支的更新,再与本地的指定分支合并(相当与fetch加上了合并分支功能的操作)
  1. 拉取远程某分支并与本地某一分支合并(没有则默认会创建):git pull <远程主机名> <远程分支名>:<本地分支名>
  2. 如果远程分支是与当前所在分支合并,则冒号后面的部分可以省略:git pull <远程主机名> <远程分支名>
  3. 如果当前分支与远程分支存在追踪关系,则可以省略远程分支名:git pull <远程主机名>
  4. 如果当前分支只有一个追踪分支,则远程主机名都可以省略:git pull

4、git push

  • 将本地分支的更新,推送到远程主机,其命令格式与git pull相似
  1. 将本地分支推送到远程分支:git push <远程主机名> <本地分支名>:<远程分支名>
  2. 如果省略远程分支名,则默认为将本地分支推送到与之关联的远程分支:(一般设置本地分支和与之关联的远程分支同名,防止混淆)git push <远程主机名> <本地分支名>
    如果对应的远程分支不存在,则会被创建(m默认与本地分支同名)

  3. 如果省略本地分支名,则表示删除指定的远程分支,这等同于推送一个空的本地分支到对应远程分支:git push origin :<远程分支> 等同于 git push origin –delete <远程分支>

  4. 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略git push origin
  5. 如果当前分支只有一个追踪分支,那么主机名也可以省略:git push
  6. 如果当前分支与多个主机存在追踪关系(使用场景相对来说较少),可以使用-u指定默认推送主机git push -u origin <主机名>设置时候需推送便可以直接使用git push
  7. 将本地的所有分支都推送到远程主机:git push –all origin
  8. 如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。如果一定要推送,可以使用–force选项(谨慎使用,除非你非常确认):git push –force origin
  • 注意:分支推送顺序的格式为<来源地>:<目的地>,所以git pull格式:<远程分支>:<本地分支>,git push格式为:<本地分支>:<远程分支>。

5、分支操作

  1. 创建本地分支:git branch test:(创建名为test的本地分支)
  2. 切换分支:git checkout test:(切换到test分支)
  3. 创建并切换分支git branch -b test:(相当于以上两条命令的合并)
  4. 查看本地分支:git branch
  5. 查看远程仓库所有分支:git branch -a
  6. 删除本地分支:git branch -d test:(删除本地test分支)
  7. 分支合并:git merge master:(将master分支合并到当前分支)
  8. 本地分支重命名:git branch -m oldName newName
  9. 远程分支重命名:
  • 重命名远程分支对应的本地分支:git branch -m oldName newName;
  • 删除远程分支:git push –delete origin oldName;
  • 上传新命名的本地分支:git push origin newName;
  • 把修改后的本地分支与远程分支关联:git branch –set-upstream-to origin/newName

分支关联

查看当前的本地分支与远程分支的关联关系:git branch -vv

未分类

把当前本地分支与远程origin的某分支进行关联处理(通过 –set-upstream-to 命令):git branch –set-upstream-to=origin/feature/clear-server-eslint-error_180713

未分类

分支差异查看

  1. 查看本地当前分支与远程某一分支的差异:git diff origin/feature/reserve-3.4
  2. 查看本地特定分支与远程分支的差异:git diff master origin/feature/reserve-3.4 (查看本地master分支与远程feature/reserve-3.4分支的差异,如图)

未分类

6、修改撤销

  1. git checkout — <文件名>:丢弃工作区的修改,就是让这个文件回到最近一次git commit或git add时的状态。
  2. git reset HEAD <文件名>:把暂存区的修改撤销掉(unstage),重新放回工作区。
  3. git reset –hard commit_id:git版本回退,回退到特定的commit_id版本
  • 流程:
  • git log查看提交历史,以便确定要回退到哪个版本(commit 之后的即为ID);

未分类

  • git reset –hard commit_id:回退到commit_id版本;
  • git reflog查看命令历史,以便确定要回到未来的哪个版本;
    • 更新远程代码到本地
      git fetch origin master(分支)
      git pull // 将fetch下来的代码pull到本地
      git diff master origin/master // 查看本地分支代码和远程仓库的差异
  • 拉取远程分支并创建本地分支

  1. git checkout -b 本地分支名 origin/远程分支名:使用此方式会在本地新建分支,并自动切换到该本地分支;
  2. git fetch origin 远程分支名:本地分支名:使用此方式会在本地新建分支,但是不会自动切换到该本地分支,需要手动checkout。

7、配置

  • git config -l // 陈列出所有的git配置项
  • git config core.ignorecase false //配置git不忽略大小写(默认忽略)参照(git 大小写)

  • 往期经典好文:

    • JavaScript经典面试题汇总 https://segmentfault.com/a/1190000015162142
    • 我的前端面试日记 https://segmentfault.com/a/1190000015268943
  • 相关好文推荐:
    • http报文详解 https://segmentfault.com/a/1190000015017908

Git回退命令

$ git reset –hard HEAD^         回退到上个版本

$ git reset –hard HEAD~3        回退到前3次提交之前,以此类推,回退到n次提交之前

$ git reset –hard commit_id     退到/进到 指定commit的sha码

强推到远程:

$ git push origin HEAD –force

删除本地分支

git branch -d branch_name

删除远程分支

git branch -r -d origin/branch_name

git push origin :branch_name

git修改本地和远程分支名称

git branch -m old_branch new_branch # Rename branch locally

git push origin :old_branch # Delete the old branch

git push –set-upstream origin new_branch # P

git 设置代理和取消代理

如果代理类型是socks5进行如下设置即可

git config --global http.proxy socks5://127.0.0.1:1080
git config --global https.proxy socks5://127.0.0.1:1080

如果是普通的http/https进行如下设置即可

git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080

取消代理设置

git config --global --unset http.proxy
git config --global --unset https.proxy

jenkins使用git+gradle+webhook实现自动部署

1、下载jenkins

网址:http://mirrors.jenkins-ci.org/,可以按照操作系统来选择相应的安装方式。RC是候选发布版,我们选择LTS长期稳定版即可。

我采用的war包的部署方式,选择war-stable,找到最新的jenkins为2.121.2,进入目录下载,或者可以直接wget链接。

wget mirrors.jenkins-ci.org/war-stable/2.121.2/jenkins.war

war包的安装方式非常简单,直接扔进tomcat目录下,只要tomcat处于运行状态,就会自动解压。

2、配置jenkins

访问jenkins目录 http://你的域名或者ip:8080/jenkins,jenkins就会启动。

未分类

稍等片刻,等jenkins启动完毕后,为了验证身份,jenkins会要求你去本地目录下读取初始密码并填入。

未分类

然后就是jenkins的配置页面的首页,会让你选择安装插件的方式,这里我选则右边自定义插件的安装方式。

未分类

选择上方的无,然后选择git,gradle,由于这里未显示完整的插件列表,webhook需要在插件管理器中配置

未分类

未分类

点击安装,等待安装成功,创建管理员账户后,设置jenkins的访问路径,开始使用jenkins

未分类

进入插件管理器,点击左侧系统管理,选择管理插件

未分类

未分类

点击可选插件,由于我使用的仓库是coding,搜索coding webhook,直接安装,其他仓库同理,若没有集成好的插件,可以搜索webhook,使用Generic Webhook Trigger(webhook通用触发器)

未分类

3、新建任务

单击开始创建一个新任务,输入任务名称test,选择构建一个自由风格的软件项目

未分类

选择丢弃旧的构建,点击右下方高级,四个参数按照自己机器的磁盘空间来填写,因为jenkins每次构建结束后(无论成功还是失败)都会记录构建,长期会占用大量的空间

$JENKINS_HOME/jobs/[JOB_NAME]/builds 目录存储了该Jenkins job的全部构建记录(目录名为构建序号)

$JENKINS_HOME/jobs/[JOB_NAME]/builds/BUILD_NUMBER/artifacts 目录存储了该次构建的artifact

未分类

之后设置源码管理,设置仓库地址,选择用户凭据

未分类

设置webhook触发器,图中的都必须选中,webhook令牌可以不填

未分类

接着去仓库中配置webhook

未分类

若触发成功就会在$JENKINS_HOME的workspace目录下生成项目文件,包括项目文件夹test,和临时文件夹test@tmp

未分类

设置gradle自动打包,使用gradle wrapper,要求项目里必须有gradle wrapper的相关文件,否则要设置wrapper的路径。

未分类

若使用gradle,可以去系统管理的全局工具配置安装指定版本的gradle

未分类

若构建成功,就会在项目的build目录下生成war包,在我实际上线的项目中,由于用到了tomcat,还需要再增加构建步骤,将生成的war包拷贝到tomcat的webapps目录下

未分类

至此,项目自动部署配置完毕,只要我在本地修改完代码push到仓库中,服务器便会自动pull代码然后打成war包部署到tomcat下。

CentOS安装新版git——超简单

忘了从哪里弄来的,CentOS6安装新版git的利器:

CentOS6:

#安装Git
yum install -y epel-release
rpm -ivh https://centos6.iuscommunity.org/ius-release.rpm
yum list git2u
yum install -y git2u
git --version

CentOS7:

[html] view plain copy
<code class="language-html">#安装Git  
yum install -y epel-release  
rpm -ivh https://centos7.iuscommunity.org/ius-release.rpm  
yum list git2u  
yum install -y git2u  
git --version  
</code>  

可以说是见到过的最简单的办法了

Git仓库完全迁移,包括所有的分支和标签,当然也包括日志

度娘了一堆git仓库迁移的内容,一个个都比较麻烦,而且本地下了代码,还要删去库地址,再切换到新库的地址上传。

一般这种操作都只是master分支,其他分支还要一个一个来,后来在51CTO上找了一个文章,简单明了,一下就全搞定了。

包括所有的分支、标签、日志,一个不少。

当然账号对应的事就没办法了。

四行命令:

git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin

利用代理解决Git命令链接GitHub过慢的问题

最近刚刚把博客转换成了Hexo,在安装的过程中频繁出错,安装缓慢。然后想到,家里的电信网络是没办法直接链接GitHub的,故参考网上的方法,给Git Bash设置了代理。果然,有了小火箭的加速,git clone速度飞快!

Git设置代理的方法

设置为HTTP协议的代理

$ git config --global http.proxy http://proxy.mysite.com:8080
$ git config --global https.proxy http://proxy.mysite.com:8080

第一个是设置Git在采用HTTP连接时的代理地址,第二个是设置Git在采用HTTPS连接时的代理地址。

设置为SOCKS5协议的代理

$ git config --global http.proxy 'socks5://127.0.0.1:1080' 
$ git config --global https.proxy 'socks5://127.0.0.1:1080'

第一个是设置Git在采用HTTP连接时的代理地址,第二个是设置Git在采用HTTPS连接时的代理地址。采用小飞机的就可以采用这个方法。

Git取消代理的方法

$ git config --global --unset http.proxy
$ git config --global --unset https.proxy

git多个远程仓库

1. 前言

  用GitHub管理自己的开源项目有几年了,最近一年更新得比较多,仓库也越来越多越来越大。有时候感觉GitHub太慢,尤其是最近感觉更为明显,于是萌生了再找个国内类似GitHub的代码托管平台的想法,同时我也还想持续更新GitHub上的仓库,于是需要一个本地仓库(我自己的开发机)多个远程仓库(Github、码云、coding)。

2. 一个远程仓库的git config

  我的开源项目Nebula一个基于事件驱动的高性能TCP网络框架的git配置文件.git/config如下:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/Bwar/Nebula.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

3. 用git命令行添加多个远程仓库

添加一个名为“mirror”的远程仓库:

git remote add mirror https://gitee.com/Bwar/Nebula.git

执行完这条命令后.git/config文件内容变成了:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/Bwar/Nebula.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[remote "mirror"]
    url = https://gitee.com/Bwar/Nebula.git
    fetch = +refs/heads/*:refs/remotes/mirror/*

此时已经是一个本地仓库,两个远程仓库。使用下面的命令可以分别从两个远程仓库拉取和推送到两个远程仓库。

git pull origin master 
git pull mirror master
git push origin master 
git push mirror master

4. 一条命令同时更新多个远程仓库

目前我的开源项目只有我一个contributor(计划2018年12月开始引入其他contributor),主要push比较少pull,输入多条命令我都觉得麻烦,一条命令将当前分支同时更新到两个远程仓库才能让我满意。于是改变一下,不用上面的mirror做法,直接在origin中添加一个url来实现一个本地仓库多个远程仓库。

git remote set-url --add origin https://gitee.com/Bwar/Nebula.git

执行这条命令后.git/config内容变成:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/Bwar/Nebula.git
        url = https://gitee.com/Bwar/Nebula.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[remote "mirror"]
    url = https://gitee.com/Bwar/Nebula.git
    fetch = +refs/heads/*:refs/remotes/mirror/*

之前添加的“mirror”留着或删掉都没关系,这时候我们一条命令即可更新两个远程仓库:

git push origin master

5. 免输入密码操作远程仓库

执行远程仓库操作需要输入密码是件比较麻烦的事情,在配置文件的url里配上用户名和密码即可免掉这样的麻烦,提高操作效率。免输密码操作远程仓库还可以通过ssh方式实现,下面只给出https方式的免输密码配置:

url = https://${user}:${password}@github.com/Bwar/Nebula.git

把上面配置中的“${user}”和“${password}”用你的远程仓库用户名和密码代入即可。

6. 直接修改git配置文件实现多个远程仓库

上面通过git remote命令完成一个本地仓库多个远程仓库配置,这些命令实际上都是通过修改.git/config实现的,其实直接修改配置文件可能会更快,我就是直接修改配置文件完成。最后我的多个远程仓库配置如下:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://${user}:${password}@github.com/Bwar/Nebula.git
        url = https://${user}:${password}@gitee.com/Bwar/Nebula.git
        url = https://${user}:${password}@git.coding.net/Bwar/NebulaBootstrap.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

完毕。

你可能会忽略的 Git 提交规范

一直是 ESLint 的忠实用户,深知规范的重要性。然而,在新项目交接中,我被 Git Commit 规范逼疯了。才意识到自己的疏忽,于是便有了一探究竟的想法。

一、为什么需要规范?

无规矩不成方圆,编程也一样。
如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你。可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目就被糟践了。不管是开发还是日后维护,都将是灾难。
这时候,有人提出了何不统一标准,大家都按照这个标准来。于是 ESLint,JSHint 等代码工具如雨后春笋般涌现,成为了项目构建的必备良品。
Git Commit 规范可能并没有那么夸张,但如果你在版本回退的时候看到一大段糟心的 Commit,恐怕会懊恼不已吧。所以,严格遵守规范,利人利己。

二、具体规则

先来看看公式:

<type>(<scope>): <subject>
  • type
    • 用于说明 commit 的类别,只允许使用下面7个标识。
feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动
  • scope
    • 用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
  • subject
    • 是 commit 目的的简短描述,不超过50个字符。
1.以动词开头,使用第一人称现在时,比如change,而不是changed或changes
2.第一个字母小写
3.结尾不加句号(.)

规范参考自阮一峰老师的文章:Commit message 和 Change log 编写指南 http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html

三、异常处理

我们先来看看这个异常提醒:

INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" !
jartto:fix bug

这里之所以报出这个警告,是因为我的提交出现了两个问题:

其一,使用了规范外的关键字;
其二,很细节的问题,jartto:后少了空格;

这时候我才回忆起来,当时提交一直失败,情急之下直接强制提交,所以以后的提交都会抱出这个异常。大致意思就是:

你的之前的 Commit 不合格~你的之前的 Commit 不合格~你的之前的 Commit 不合格

这时候就很烦了,我们只能去将之前的错误修正,那么如何操作呢?

四、如何修改之前的 commit 信息?

其实并不复杂,我们只需要这样做:

1、将当前分支无关的工作状态进行暂存

git stash

2、将 HEAD 移动到需要修改的 commit 上

git rebase 9633cf0919^ --interactive

3、找到需要修改的 commit ,将首行的 pick 改成 edit

4、开始着手解决你的 bug

5、 git add 将改动文件添加到暂存

6、 git commit –amend 追加改动到提交

7、git rebase –continue 移动 HEAD 回最新的 commit

8、恢复之前的工作状态

git stash pop

大功告成,是不是想把整个 Commit 都修改一遍,逃~

此处参考自:修改 Commit 日志和内容 https://www.aliyun.com/jiaocheng/125261.html

五、项目中使用

这时候问题又来了,为什么我提交的时候会有警告,这个又是如何做到的呢?
这时候,我们需要一款 Node 插件 validate-commit-msg 来检查项目中 Commit message 是否规范。

1.首先,安装插件:

npm install --save-dev validate-commit-msg

2.使用方式一,建立 .vcmrc 文件:

{
  "types": ["feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", "revert"],
  "scope": {
    "required": false,
    "allowed": ["*"],
    "validate": false,
    "multiple": false
  },
  "warnOnFail": false,
  "maxSubjectLength": 100,
  "subjectPattern": ".+",
  "subjectPatternErrorMsg": "subject does not match subject pattern!",
  "helpMessage": "",
  "autoFix": false
}

3.使用方式二:写入 package.json

{
  "config": {
    "validate-commit-msg": {
      /* your config here */
    }
  }
}

4.可是我们如果想自动使用 ghooks 钩子函数呢?

{
  …
  "config": {
    "ghooks": {
      "pre-commit": "gulp lint",
      "commit-msg": "validate-commit-msg",
      "pre-push": "make test",
      "post-merge": "npm install",
      "post-rewrite": "npm install",
      …
    }
  }
  …
}

在 ghooks 中我们可以做很多事情,当然不只是 validate-commit-msg 哦。

更多细节请参考: https://github.com/conventional-changelog-archived-repos/validate-commit-msg

六、Commit 规范的作用

1.提供更多的信息,方便排查与回退;
2.过滤关键字,迅速定位;
3.方便生成文档;

七、生成 Change log

正如上文提到的生成文档,如果我们的提交都按照规范的话,那就很简单了。生成的文档包括以下三个部分:

  • New features
  • Bug fixes
  • Breaking changes.

每个部分都会罗列相关的 commit ,并且有指向这些 commit 的链接。当然,生成的文档允许手动修改,所以发布前,你还可以添加其他内容。
这里需要使用工具 Conventional Changelog 生成 Change log :

npm install -g conventional-changelog
cd jartto-domo
conventional-changelog -p angular -i CHANGELOG.md -w

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

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

这样,使用起来就很简单了:

npm run changelog

到这里,我们所有的问题都搞明白了。

八、总结

看完文章,你还会如此放荡不羁吗?你还会随心所欲的编写 Commit 吗?你还会如此 git commit -m “hello jartto”提交吗?
答案是否定的,因为使用了钩子函数,你没有机会了,否则将是无穷无尽的恢复 Commit。这倒可以养成良好的提交习惯。