Git系列——Git 提交规范

git Husky 搭配 commitizen ,规范代码提交 husky可以帮助我们在 执行 git commit 提交的时候,按照eslint 规范进行修复代码。husky是一个git hook工具,可以帮助我们触发git提交的各个阶段:pre-commit、commit-msg、pre-push 支持所有的Git 钩子简单说就是在 Git 执行一些操作时,在钩子处执行一些自己需要的命令。 阅读详情

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

一、为什么需要规范?

无规矩不成方圆,编程也一样。

如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你。可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目就被糟践了。不管是开发还是日后维护,都将是灾难。

这时候,有人提出了何不统一标准,大家都按照这个标准来。于是 ESLint,JSHint 等代码工具如雨后春笋般涌现,成为了项目构建的必备良品。

Git Commit 规范可能并没有那么夸张,但如果你在版本回退的时候看到一大段糟心的 Commit,恐怕会懊恼不已吧。所以,严格遵守规范,利人利己。

 

二、具体规则

先来看看公式:

<type>(<scope>): <subject>

type

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

  1. feat:新功能(feature)

  2. fix:修补bug

  3. docs:文档(documentation)

  4. style: 格式(不影响代码运行的变动)

  5. refactor:重构(即不是新增功能,也不是修改bug的代码变动)

  6. test:增加测试

  7. chore:构建过程或辅助工具的变动

scope

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

subject

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

  1. 以动词开头,使用第一人称现在时,比如change,而不是changed或changes

  2. 第一个字母小写

  3. 结尾不加句号(.)

规范参考自阮一峰老师的文章:Commit message 和 Change log 编写指南[1]。

 

三、异常处理

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

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 日志和内容[2]

 

五、项目中使用

这时候问题又来了,为什么我提交的时候会有警告,这个又是如何做到的呢?

这时候,我们需要一款 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[3] 钩子函数呢?

{
  …
  "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 哦。

更多细节请参考:validate-commit-msg[4]

 

六、Commit 规范的作用

  1. 提供更多的信息,方便排查与回退;

  2. 过滤关键字,迅速定位;

  3. 方便生成文档。

 

七、生成 Change log

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

  • New features

  • Bug fixes

  • Breaking changes

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

这里需要使用工具 Conventional Changelog[5] 生成 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

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

 

八、总结

看完文章,你还会如此放荡不羁吗?你还会随心所欲的编写 Commit 吗?你还会如此 git commit -m "hello jartto"提交吗?

答案是否定的,因为使用了钩子函数,你没有机会了,否则将是无穷无尽的恢复 Commit。这倒可以养成良好的提交习惯,?~

 

相关链接:

  1. http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html

  2. https://www.aliyun.com/jiaocheng/125261.html

  3. https://www.npmjs.com/package/ghooks

  4. https://github.com/conventional-changelog-archived-repos/validate-commit-msg

  5. https://github.com/conventional-changelog/conventional-changelog

 

原文链接:http://jartto.wang/2018/07/08/git-commit/

GIT 提交说明的规范 GIT 提交说明的规范部分提交代码说明参考Commit Message 的标准格式Header 介绍Body 介绍Footer 介绍提交示例 通过 GIT 提交代码的时候,必须要写提交说明,否则就无法提交 如果我们所有人能够按照一套规范去写提交说明(Commit Message),那我们阅读 Pull Request 的效率就会很高, 参考了 Github 上的开源项目及部分公司的提交规范,总结出以下规范。 规范是所有人默认的一套规定,并不是强制要求,以公司的规范为首要,如果有问题,请留言。。。 部分提交 阅读详情

相关推荐

CKEditor5富文本编辑器 - 视频引入、预览及自定义toolbar

文章目录定义遇到的问题视频部分引入媒体url失败原因解决方法:自定义视频provider视频预览及页面不显示视频问题解决方案:H5 \标签如何移除toolbar中的部分插件 一个小后端很少接触前端框架,只能在知识的海洋中漂泊。。。 定义 <script src="https://cdn.ckeditor.com/ckeditor5/16.0.0/classic/ckeditor.js"&gt...

huhui806的博客 8198

Git提交规范

以下规范参考Angular提交的规范。对于如何格式化git commit消息,我们有非常精确的规则。这导致更多 在浏览项目历史时,易于理解的可读信息。但同时 我们使用git commit消息来生成基于AngularJS提供的消息模板。1、commit message format消息格式每个提交消息由一个头、一个正文和一个页脚组成。header有一个特殊的 包含类型、范围和主题的格式。header是必填的,header的范围是可选的。提交消息的任何一行不能超过100个字符!

专注于大数据方向,区块链,前后端,数据可视化,人工智能等领域 1万+

别再被手机厂商忽悠了!一文看懂光学变焦、数字变焦和混合变焦到底有啥区别

本文深入解析手机摄影中的光学变焦、数字变焦和混合变焦技术,揭示它们的工作原理和实际效果差异。光学变焦保持无损画质,数字变焦依赖算法放大,而混合变焦结合两者优势。帮助消费者识破厂商宣传,根据实际需求选择最适合的变焦方式,提升拍摄质量。

weixin_28717969的博客 411

git提交规范

遵循 Git 提交规范可以让团队协作更加高效和规范,也更容易进行版本管理和代码维护。希望大家都能养成良好的提交习惯!

litterboys的博客 9566

LangChain学习及应用(超详细)

Model I/O 部分是与语言模型进行交互的核心组件,包括输入提示(Prompt Template)、调用模型(Model)、输出解析(Output Parser)。简单来说,就是输入、处理、输出这三个步骤。LLM 因其具有海量参数,需要花费相当的物力与时间成本进行预训练和微调,同时商用 LLM 还需要进行各种安全测试与风险评估等。因此 LLM 会存在知识滞后的问题。在专有领域,LLM 无法学习到所有的专业知识细节,因此在面向专业领域知识的提问时,无法给出可靠准确的回答。

weixin_39764056的博客 4257

【HDR】曝光融合(Exposure Fusion)

在曝光融合(Exposure Fusion)算法问世之前,多曝光序列合成用于显示的HDR需要两个步骤,第一步是将多张不同曝光的低动态范围图像合成为HDR(例如Debevec提出的加权融合方法),通常HDR为12bit或者16bit;第二步是通过tonemapping对高动态范围HDR进行压缩以支持低动态范围显示设备(例如Durand提出的基于双边滤波的tonemapping算法),一般会压缩至8bit。

专注人工智能,主攻CV 1万+

Git 提交规范

Git 提交规范,包含命令行、Commitizen、 [git-commit-plugin、idea插件Git Commit Template

半夏_2021的博客 3万+

AD9361功能介绍和使用

AD9361使用分数分频锁相环(PLL)来产生发射机和接收机本地振荡器(LO)频率和BB PLL。BB PLL 可用于数据转换、数字滤波器和 |/O 端口。PLL的参考时钟可以由外部振荡器或外部晶体(XO)和数字可编程片内可变电容提供,电容微调产生参考时钟频率,XO和微调电容的组合统称为DCXO。有多个天线输入的分集系统。接收链数据首先经过低噪声放大器(LNA),然后是同相(1)和正交(Q)放大器,混频器和频带整形滤波器,可将接收到的信号下变频为基带以进行数字化。时分双工(TDD)和频分双工(FDD)。。。

wangjie36的博客 1万+

笔记——Git Commit 提交规范

在团队协作中,合理的提交规范能够帮助开发者提高代码质量、简化代码审查流程,并促进更高效的团队协作。本文介绍 Git commit 提交规范的重要性,并分享一些最佳实践,帮助开发者更好地管理和记录代码提交。

蜡笔小谢的博客 6736

Python教程:一文了解Python的深拷贝与浅拷贝

理解 Python 中的深拷贝(deep copy)和浅拷贝(shallow copy)是非常重要的,特别是在处理嵌套结构的数据时。让我们深入探讨这两个概念,并通过代码示例进行说明。

旦莫的博客 3968

使用LabVIEW创建和分析柱状图:从基础绘制到高级数据分析的完整指南

LabVIEW,全称为Laboratory Virtual Instrument Engineering Workbench,是由美国国家仪器公司(National Instruments, NI)开发的一款图形化编程语言。自1986年首次推出以来,LabVIEW凭借其强大的数据采集、分析和控制能力,在工程、科研、教育等领域得到了广泛应用。与传统的文本编程语言不同,LabVIEW采用了图形化编程方式,用户通过连接不同的函数节点来实现复杂的逻辑和算法。

qq_38334677的博客 775

前端工程化工具系列(四)—— Commitlint(v19.6.0):规范化 Git 提交

是对 Git 提交的信息进行校验的工具。

天下布武 1169

【实战】LLaMA-Factory 如何做 LLM 的多轮对话微调

LLaMA-Factory 作为一个广受欢迎、易于使用的 LLM 微调框架,为开发者提供了便捷的途径来针对特定任务(包括多轮对话)优化模型。本文将深入探讨 LLaMA-Factory 如何支持多轮对话微调,涵盖其基本概念、数据准备、核心机制、评估方法等。简单来说,多轮对话是指包含两个或更多轮次(Turn)的交互过程,其中每一轮通常包含用户的一个输入和模型的一个输出。后续轮次的回应通常依赖于前面轮次的对话内容。模型需要理解并记忆对话历史。

kakaZhui的博客 1309

实际工作中 Git Commit 代码提交规范是什么样的?

必填,指明本次提交的目的,如 feat 表示新开发的功能(feature)、fix 表示修复 bug、refactor 表示代码重构等。Header 通常包含了提交的类型、作用域和简短的主题描述,这些信息对于快速了解每次提交的内容和目的已经足够。持续集成的配置文件和脚本的变动(例如:Travis,Circle,BrowserStack,SauceLabs)Git 是我们日常工作中使用最为广泛的分布式版本代码控制系统,因此在我们的实际工作中,可选,描述修改的影响范围,如模块名、功能名等,视项目不同而不同。

weixin_36898262的博客 52

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

前端工程化工具系列(八)——Commitizen(v4.3.0):Git 提交规范化工具

在中曾介绍过 commitlint,它主要负责检查提交信息的规范性。而本文中的 commitizen,则是提供给了一个交互式的命令行界面,引导开发者按照预定义的格式填写提交信息。它俩的目的都是规范 git 提交。按照使用习惯选择其一即可。

天下布武 880

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

关于git代码上传的规范以及commit message 模板的自动生成

关于git代码上传的规范以及commit message 模板的自动生成

android 系统定制开发那些事 5230

git提交步骤

Part 1 提交未授权问题git add -A git commit -a "" git push origin HEAD:refs/for/master export GIT_SSH_COMMAND='ssh -o KexAlgorithms=+diffie-hellman-group1-sha1' scp -oKexAlgori...

测试 546

【Lint】Git提交记录格式化 —— commitlint

前言 使用方式 依赖安装 npm i husky -D (husky v7版本) npm i @commitlint/config-conventional @commitlint/cli -D husky init npx husky install commit 文本格式 <type>(<scope>): <subject> <空行> <body> <空行> <footer> 【Header】 type 标识

乐闻世界 1618

git pull 指定分支_还在把GIT当做SVN用?用了这么久的GIT,你知道它也有规范吗?

作为版本控制软件,SVN早已被淘汰了,现在越来越多的开发者都已经拥入了GIT的怀抱。可是,你一直在使用GIT的方式,真的用对了吗?下面就给大家列出一些常见的错误使用方式和一些规范和技巧,注意事项。错误做法1:commit之后立即push有些人还是停留在SVN的落后思想中,还是使用SVN那种陈旧的提交方式,还特地为自己找了一个看似很合理的借口:“我这样可以避免发生冲突”,“我不想解决冲突”你这样真的...

weixin_39881859的博客 335

推荐使用:Gitmoji 插件 - 让你的 Git 提交变得生动有趣!

推荐使用:Gitmoji 插件 - 让你的 Git 提交变得生动有趣! 在日复一日的代码提交中,是否已经厌倦了千篇一律的提交信息?今天,向大家隆重推荐一款能够点亮我们日常开发工作的开源宝藏插件——Gitmoji。这不仅是一款简单的辅助工具,更是一种提升团队协作效率和编码心情的创新方式。 项目介绍 Gitmoji 插件,正如其名,它运用丰富的表情符号来帮助我们选择最合适的时机回顾 Git 日志中的提...

gitblog_01173的博客 600

分享下工作中使用的git提交规范

遇到的问题 版本回退时无法快速定位到指定版本 无法知道项目中封版操作是哪一个commit 无法清晰的知道每次提交的记录 ####以下是commit提交规范 每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。 其中,Header 是必需的,Body 和 Footer 可以省略。 [<type>]: (<scope>): &l...

github_39506988的博客 2万+

git提交规范,规范自己的提交标准

为了规范我的git提交内容,提交的时候commit -m “备注的信息”,但是每个人的备注信息千奇百怪,为了统一,我们进行了git的规范。 首先要全局安装commitizen npm i -g commitizen@4.2.4 然后安装插件 npm i cz-customizable@6.3.0 --save-dev 在package.json中添加代码 "config": { "commitizen": { "path": "node_modules/cz-customizable

weixin_44292923的博客 1万+

Git规范:Git提交规范

1.Commit message格式 <type>(<scope>):<subject> (1)type(必须) 作用:用于说明Git commit的类别,只允许使用下面的标识。 ① feat:新功能(feature)。 ② fix/to:修复bug,可以是QA(Quality Assurance)发现的BUG,也可以是研发自己发现的BUG。 备注: fix:产生diff并自动修复此问题。适合于一次提交直接修复问题。 to:只产生diff不自动修复此问题

baidu_38300480的博客 6201

【研发规范】Git 提交(commit)、CodeReview规范

本文阐述了代码提交规范的重要性及具体实践方法。提交规范包含提交信息和提交内容两部分,要求提交信息格式规范(类型、范围、主题、正文、脚注),内容保持原子性(一个提交只做一件事)。良好的提交规范能降低Code Review成本,便于历史追溯。文章还介绍了提交规范与Code Review流程的结合方式,建议使用工具如commitizen、husky等来确保规范执行。规范的代码提交是提高团队协作效率和项目可维护性的关键。

NeoLshu的博客 5128
上一篇: Git系列——win 10配置git环境
下一篇: Git系列——IntelliJ IDEA使用git托管项目
冷静BB
博客等级 码龄12年 298粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值