首页 > 其他分享 >Git Commit 提交规范

Git Commit 提交规范

时间:2024-07-09 15:53:31浏览次数:16  
标签:Git 代码 修改 提交 commit Commit message scope

背景

Git每次提交代码都需要写commit message,否则就不允许提交。一般来说,commit message应该清晰明了,说明本次提交的目的,具体做了什么操作。但是在日常开发中,大家的commit message千奇百怪,中英文混合使用、fix bug等各种笼统的message司空见怪,这就导致后续代码维护成本特别大,有时自己都不知道自己的fix bug修改的是什么问题。基于以上这些问题,我们希望通过定制 git commit 规范,让规范更好的服务于质量,提高大家的研发效率。

规范建设

目前Angular规范是使用最广的写法,比较合理和系统化,并且有配套的工具(IDEA就有插件支持这种写法)。

commit message格式

Commit message 都包括三个部分:header,body 和 footer。

header 是必需的,body 和 footer 可以省略。

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

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

type 更改类型(必须)

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

  1. feat:新功能(feature)。

  2. fix/to:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。

    1. fix:产生diff并自动修复此问题。适合于一次提交直接修复问题

    2. to:只产生diff不自动修复此问题。适合于多次提交。最终修复问题提交时使用fix

  3. docs:文档(documentation)。

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

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

  6. perf:优化相关,比如提升性能、体验。

  7. test:增加测试。

  8. build: 构建依赖更改

  9. ci: 更改 CI 配置文件或者脚本

  10. chore:更改构建流程、或者增加依赖库、工具等

  11. revert:回滚到上一个版本。

  12. merge:代码合并。

  13. sync:同步主线或分支的Bug。

scope 此次变更范围(可选)

scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。如果你的修改影响了不止一个scope,你可以使用*代替。

scope 主要指的是代码的影响面。scope并没有要求强制,但团队可以按照自己的理解进行设计。通常由技术维度和业务维度两种划分方式。比如按照技术分为:controllerdtoservicedao等。但因为一个功能提交,会涉及到多个scope(都不喜欢非常细粒度的提交),所以按照技术维度分的情况比较少。

按照业务模块进行划分,也是比较不错的选择。比如分为userorder等划分,可以很容易看出是影响用户模块还是order模块

subject 简短描述(必须)

subject是commit目的的简短描述,不超过50个字符。技术文档的大标题、功能的概述

建议使用中文(感觉中国人用中文描述问题能更清楚一些)。

  • 结尾不加句号或其他标点符号。

  • 根据以上规范git commit message将是如下的格式:

fix(order): 修复了1分钱购买套餐的bug

测试反馈可以1分钱买套餐,目前已经卖出了200单

Closes #2677

[skip ci]

body (可选)

body 详细描述

Body 部分是对本次 commit 的详细描述,可以分成多行。

  • 第2行是空行

  • 应该说明代码变动的动机,以及与以前行为的对比。

changes 重大变更(可选)

即不兼容修改,指的是本次提交修改了不兼容之前版本的API或者环境变量

所有不兼容修改都必须在页脚中作为中断更改块提到,以BREAKING CHANGE:开头,后跟一个空格或者两个换行符,其余的信息就是对此次修改的描述,修改的理由和修改注释

BREAKING CHANGE: isolate scope bindings definition has changed and
    the inject option for the directive controller injection was removed.

    To migrate the code follow the example below:

    Before:

    。。。
    。。。

    After:

    。。。
    。。。

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

closes 关闭问题(可选)

如果本次提交目的是修改issue的话,需要在页脚引用该issue

以关键字Closes开头,比如

Closes #234

如果修改了多个bug,以逗号隔开

Closes #123, #245, #992

skipCi(可选)

CI 全称 Continuous Integration,名为持续集成,传统的 CI 含义指的是代码仓库只要有代码变更(或者说有人想推代码入库),就会自动执行预先设计好的检查、防护流程,运行一系列构建、测试、部署等流程,并最终告知每一步的运行结果,确保人提交上来的代码没有问题后,才有机会将新代码合并到主干分支,而主干分支无论何时都一定是正确可运行的高质量版本,可以随时交付客户使用。

skip CI选项,跳过 CI 。一般的 CI 工具,都可以设置提交代码时自动触发编译。但你可以告诉它忽略本次提交。这可能是因为你提前预判到了一些构建风险,或者就是不想编译。

Revert

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

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

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

规范 Git 提交信息工具

上面的内容比较多,记下来比较繁琐的,特别是有时候我们很难记住所有的 type 类型,IDEA 现在有一个插件,就是用来规范 git 提交模板的。

IDEA 的插件市场中安装 git commit message helper,直接搜索安装,然后重启 IDEA 即可。

VScode 可以安装插件 Git-commit-plugin For Vscode

案例:

点击提交后结果:

feat(dao): 加类

加了xxxx
添加字段xxxx
删除xxxx

BREAKING CHANGE: 添加xxxx2.0
删除xxx1.0

Closes 1257

[skip ci]

git commit 规范指南

Angular提交信息规范 - Git Guide

标签:Git,代码,修改,提交,commit,Commit,message,scope
From: https://www.cnblogs.com/touchTomorrow/p/18292096

相关文章

  • 爆赞!GitHub首本Python开发实战背记手册,标星果然百万名不虚传
    Python (发音:['paiθ(ə)n;(US)'paiθɔn]n.蟒蛇,巨蛇),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。Python语言的特点......
  • jenkins拉取远程仓库的代码如gitlab
    jenkins结合远程仓库既然是持续集成,对代码进行构建,我们得获取代码仓库的内容,这里选择我们搭建的gitlab服务器开发工程师的机器1.在window上生成ssh-key$ssh-keygen2.添加到代码仓库github/gitlab都玩一玩,公司用这俩居多gitlab上添加该机器的ssh-key允许上传代码,咱这......
  • Nerdbank.GitVersioning .net 版本自动生成工具
    在.NET7中使用Nerdbank.GitVersioning进行版本控制,可以按照以下步骤进行配置:安装Nerdbank.GitVersioning包:使用NuGet包管理器控制台安装该包: Install-PackageNerdbank.GitVersioning安装nbgv工具:使用.NETCLI安装nbgv工具:dotnettoolinstall-gnbgv......
  • GitHub 创始人资助的开源浏览器「GitHub 热点速览」
    你是否注意到,现在主流的浏览器如Chrome、Edge、Brave和Opera都采用了谷歌的Chromium引擎?同时,谷歌每年不惜花费数十亿美元,确保其搜索引擎在Safari中的默认地位,甚至连Firefox也难逃商业利益的影响,这使得谷歌在浏览器和搜索引擎市场“一家独大”。GitHub创始人兼前CEO......
  • 简易Git命令行入门
    简易的Git命令行入门教程:1.Git全局设置:gitconfig--globaluser.name"demo"gitconfig--globaluser.email"[email protected]"2.创建git仓库:mkdirdemo1cddemo1gitinittouchREADME.mdgitaddREADME.mdgitcommit-m"firstcommit"git......
  • 【Git 学习笔记】第三章 分支、合并及配置项(下)
    3.4使用rerere合并有冲突的Git版本如果每天都需要合并分支,或者在一个长期维护的特性分支上需要一直相同的代码冲突,那么可以试试gitrerere(reuserecordedresolution)。该命令默认不生效,需要手动配置生效:(可设为用户级配置,添加--global标记)$gitconfigrerere.en......
  • 【规范】Git分支版本管理
    一、分支规范分支用途权限master主干:稳定版本分支受保护develop开发:开发最新版本分支受保护feature功能特性分支,版本迭代bug分支,从develop拉取开发的功能分支开放hotfix线上换环境紧急bug修复分支开放 二、Git分支在实际开发中使用流程通过功能......
  • git合并代码方法
    你合并代码用merge还是用rebase?macrozheng 2024年07月08日14:10 江苏 1人听过 以下文章来源于古时的风筝 ,作者风筝古时的风筝.写代码是一种爱好,写文章是一种情怀。mall学习教程官网:macrozheng.com你们平时合并代码的时候用merge还是rebase?我问了......
  • 常用的一些git命令与讲解,看看你还有哪些不知道
    Git是一个分布式的版本控制系统,用作Linux内核代码的管理,Git同样可以作为部署工具所使用。GitHub的独特在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建......
  • 使用gitea搭建源码管理【0到1架构系列】
    使用开源搭建Git源码方案,gitlab和gitea是两个不错的方案,gitlab以前简单易用,现在功能复杂且对开源并不友好,gitea一直保持功能单一易用且完全开源,个人推荐gitea。通过容器安装比较简单易用,使用镜像加速器拉取或许更快些。dockerpullbitnami/giteagitea需要数据库储存,可以选择my......