1、触发事件

我有这样一个版本库,里面包含两个学习用的练习项目:BookStore(以下简称BS)和PictureFriend(以下简称PF)


我在更改PF以后,未进行提交,同时又到BS中优化了一下文件夹结构,然后此时我commit,提交备注信息为“添加图友网项目,更改为Maven形式,报错找不到spring监听器,待解决”,提交成功,似乎没什么问题。

但是当我在github上看到的情况如下,我知道我没有处理好:

 
BookStore项目实际上跟这个备注并没有关系,而是PictureFriend才主要是这次commit的内容,只是因为我将两个项目的操作在同一次commit中进行提交,造成了这样的情况。可见如果是正式的项目,如此的提交是多么混乱,他人将难以维护和修改。

究其原因,主要还是在正确的git提交姿势上知之甚少:
1、不同的要分别分次提交,(这里不同指 如:不同的修改类型//优化还是新增etc.//,不同的模块,不同的功能等);
2、提交的信息要进行一定程度的格式化。



2、知之为知之

commit的写法规范有很多,以下参考网络相关文章,并进行简化以定义个人风格。
参考链接:

2.1 Commit message的格式化

每次提交,Commit message 都包括两个核心部分:标题 和 内容。
<类型>(可选): <主题>
// 空一行
<内容>
3
 
1
<类型>(可选): <主题>
2
// 空一行
3
<内容>
其中,标题 是必需的,内容无需过多描述的话,正文内容部分可以省略。

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

2.1.1 标题

标题部分只有一行,包括字段:类型 和 主题。

标题限制总字数在50个字符以内,以保证容易阅读。

e.g.

feat: init LearnGit.git

I got a wrong-style git commit, so I init a .git for learning
how to write a git commit message in right way. And the last line just write here for a simple test,
it's useless acturally.
x
 
1
feat: init LearnGit.git
2

3
I got a wrong-style git commit, so I init a .git for learning
4
how to write a git commit message in right way.
5

6
And the last line just write here for a simple test,
7
it's useless acturally.

2.1.1.1 类型

类型 用于说明 commit 的类别,只允许使用下面7个标识。
  • init:项目初始化(用于项目初始化或其他某种行为的开始描述,不影响代码)
  • feat:新功能(feature)
  • fix:修补bug
  • docs:文档(documentation)
  • opt:优化和改善,比如弹窗进行确认提示等相关的,不会改动逻辑和具体功能等
  • style: 格式(不影响代码运行的变动)
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  • test:增加测试
  • save:单纯地保存记录
  • other:用于难以分类的类别(不建议使用,但一些如删除不必要的文件,更新.ignore之类的可以使用)

(可选)类型后面可以加上括号,括号内填写主要变动的范围,比如按功能模块分,某模块;或按项目三层架构模式分,分数据层、控制层之类的。
  • #:表示模块
    • #student --> 表示 学生模块 (具体的模块开头字母小写,驼峰命名)
    • #ALL --> 表示 所有模块 (特殊含义如ALL表所有,MOST表大部分,用大写字母表示)
    • #MOST --> 表示 大部分模块

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

2.1.1.2 主题

主题 是 commit 目的的简短描述,不超过50个字符。
  • 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
  • 第一个字母小写
  • 结尾不加句号(.)

2.1.2 内容

内容部分是对本次 commit 的详细描述,可以分成多行,正文在 72 个字符处换行。

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

于是可以这样写:
balabala : balabala

what:
balabala

why:
balabala




2.2 格式化后Commit message的好处

2.2.1 提供更多的历史信息,方便快速浏览

直接使用git log你得到的是:
 
比如,下面的命令显示上次发布后的变动,每个commit占据一行。你只看行首,就知道某次 commit 的目的。

$ git log <last tag> HEAD --pretty=format:%s
1
 
1
$ git log <last tag> HEAD --pretty=format:%s
关于更多git log的输出格式,参考以下:

2.2.2 可以过滤某些commit(比如文档改动),便于快速查找信息

比如,下面的命令仅仅显示feat类型的commit。

$ git log <last release> HEAD --grep feat
 
1
$ git log <last release> HEAD --grep feat
 
当然,你还可以这样:

关于更多过滤规则,参考以下:
e.g.
 

如何写好git commit message的更多相关文章

  1. 我是怎么写 Git Commit message 的?

    目录 作用 用的什么规范? type scope subject body footer 参考文章 用的什么辅助工具? 作用 编写格式化的 commit message 能够大大提高代码的维护效率. ...

  2. git第四节----git commit message

    @git  commit message 什么是git commit message :git commit -m '每次提交时编辑的内容' git commit message的好处:      1 ...

  3. Git Commit Message 规范

    今天来说说团队开发中,对于 Git commit message 规范问题. 社区上有各种 Commit message 的规范,本文介绍 Angular 规范,目前使用较广,比较合理和系统化,并且有 ...

  4. [译]How to Write a Git Commit Message

    原文: http://chris.beams.io/posts/git-commit/ 介绍:为什么好的commit message很重要 你浏览项目commit message的时候或多或少会有些困 ...

  5. 如何写好 Git commit messages

    导语:任何软件项目都是一个协作项目,它至少需要2个开发人员参与,当原始的开发人员将项目开发几个星期或者几个月之后,项目步入正规.不过他们或者后续的开发人员仍然需要经常提交一些代码去修复bug或者实现新 ...

  6. git使用总结(包含git commit message 和 changelog 工具的介绍)

    [git的配置] 1.配置用户名和邮箱: 分为全局配置和局部配置 --system 系统配置  --global 全局配置    --local 局部配置 Git读取时:优先从local>glo ...

  7. 优化 Git Commit Message

    目前很多项目都是通过 Git 进行管理的,Git 每次提交代码的过程中 提交说明 commit message 是必须的.但仅仅必须是不够的,好的提交说明可以帮助我们提高项目的整体质量. 作用与优点 ...

  8. Git commit message和工作流规范

    目的 统一团队Git commit日志标准,便于后续代码review,版本发布以及日志自动化生成等等. 统一团队的Git工作流,包括分支使用.tag规范.issue等 Git commit日志参考案例 ...

  9. commitizen和cz-customizable配置git commit message

    起因 团队对提交的commit message格式有约定俗称的要求,但是没有一个统一的规范,导致大家提交的commit message或多或少不太一样.因此,需要一个工具来帮助大家统一commit m ...

随机推荐

  1. 秒懂OAuth2.0

    1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常简单的一件事情,网上一堆神乎其神的讲解,让我不得不写一篇文章来终结它们. 一项新的技术,无非就是了解它是什么,为什 ...

  2. 2017-4-25/设计缓存(LFU)

    1. 恒定缓存性能有哪些因素? 命中率.缓存更新策略.缓存最大数据量. 命中率:指请求缓存次数和缓存返回正确结果次数的比例.比例越高,缓存的使用率越高,用来衡量缓存机智的好坏和效率.如果数据频繁更新, ...

  3. php Yii2使用registerJs或registerCss报错syntax error, unexpected end of file

    解决方法: 注册时$js=<<<JS .....JS;//结尾处JS;应单独成行并且没有空格  JS;//这样就会报错,多了空格JS;//这样就不会

  4. 30岁后还能入IT行业吗?

    前言 写这样的文章只想给那些准备改行想入IT行业的同学一点点建议,当然只做参考,我的个人经历. 我也是一个30岁改行进IT行业的程序猿.入这行也有一年多了吧.给我的感觉就是比较苦逼. 入行前的培训 进 ...

  5. BotVS开发基础—2.7 指标MA

    代码 #计算一小时 MA5均线 # 时间 2017-06-29 00:00:00 -2017-06-30 00:00:00 1小时 实盘级Tick # 平台 OCKCoin BTC def main( ...

  6. Hacking JWT(JSON Web Token)

    0x01 JWT工作流程 JSON Web Token(JWT)是一个非常轻巧的规范. 这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. JWT常被用于前后端分离,可以和Restful ...

  7. 残差网络resnet学习

    Deep Residual Learning for Image Recognition 微软亚洲研究院的何凯明等人 论文地址 https://arxiv.org/pdf/1512.03385v1.p ...

  8. org.apache.commons.lang.StringUtils 中 Join 函数

    转自 http://my.oschina.net/zenglingfan/blog/134872 写代码的时候,经常会碰到需要把一个List中的每个元素,按逗号分隔转成字符串的需求,以前是自己写一段比 ...

  9. NOSQL EYE开源

    简介 NOSQL数据库监控工具,目前实现了对Redis.MongoDB的监控功能. 功能列表 演示地址 http://106.14.181.95:7004  登录用户名.密码:admin/admin ...

  10. (转载)Java多线程入门理解

    转载出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更 ...