【推荐】git commit 规范和如何在 commit 里使用 emoji

article/2025/6/19 1:06:00

前言

大家好,我是桃翁,今天给大家带来的是关于 git commit 那些事儿,希望大家喜欢。

对于规范 git commit message 我是分成了两种类型去看待。

  • 对于通用库、开源项目这类多人维护,而且极大可能别人会来看这份代码的,一定要规范,特别是对于开源项目,往往会要列 Change Log,规范好 commit 节省自己整理 log 的时间,也方便了用户。

  • 对于业务代码,特别是那种一个人维护的,其实不搞问题也不大,因为极小可能会有人来看你的 commit message。但是我依然还是建议规范一下,不然一旦后面想去看就会花费很多的力气,毕竟规范一下也不麻烦。

通过本篇文章你讲了解到三部分内容:

  1. 了解 git commit 规范

  2. 学到用工具 Commitizen 来规范 commit

  3. 学到如何在 commit message 里加上好看的 emoji

规范

现在主流的 commit message 规范就是 Angular 团队所用的准则[1],继而衍生了 Conventional Commits specification[2]. 很多工具也是基于此规范。

每次提交,Commit message 都包括三个部分:header,body 和 footer,其中 header 有一个特殊的格式,包括了 type、scope、subject。

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

其中 header 是必选的,但是 header 里的 scope 是可选的,另外提交的 message 长度不要超过 100 个字符,太长了不易阅读。

对于我个人来说,我觉得只要把 header 部分规范其实基本能满足绝大部分需要了,强制去规范 body 和 footer 对于团队的同学来说简直是折磨,所以我这里仅介绍 header 的几部分

type

type 指明 git commit 的类别,应该使用以下类型

  • 『feat』: 新增功能

  • 『fix』: 修复 bug

  • 『docs』: 仅仅修改了文档,比如 README, CHANGELOG 等等

  • 『test』: 增加/修改测试用例,包括单元测试、集成测试等

  • 『style』: 修改了空行、缩进格式、引用包排序等等(不改变代码逻辑)

  • 『perf』: 优化相关内容,比如提升性能、体验、算法等

  • 『refactor』: 代码重构,「没有新功能或者 bug 修复」

  • 『chore』: 改变构建流程、或者增加依赖库、工具等

  • 『revert』: 回滚到上一个版本

  • 『merge』: 代码合并

这里面有些 angular 团队没有,自己可以自行增减

scope(可选)

scope 用于说明 commit 影响的范围,根据不同项目有不同层次描述。若没有特殊规定,也可以描述影响的哪些功能等。

subject

subject 是 commit 目的的简短描述,不超过 50/80 个字符,一般 git 提交的时候会有颜色提示。

  • 若英文用不惯,那么推荐使用中文

  • 若是开源代码,一律推荐统一英文,英文不行可以翻译软件用起来

  • 若是开源代码,可以再附加对应的 issue 地址

  • 结尾不加标点符号

工具:Commitizen

Commitizen 是一个撰写合格 Commit message 的工具,(详细说明见 github 地址[3]),用于代替 git commit 指令,而 cz-conventional-changelog 适配器提供 conventional-changelog 标准(约定式提交标准)。基于不同需求,也可以使用不同适配器。

1. 全局安装 commitizen cz-conventional-changelog

npm install -g commitizen cz-conventional-changelog

2. git cz 取代 git commit

安装完毕后,可直接使用 git cz 来取代 git commit。

图片

可以看到当你 cz 之后,下面有很多的 type 让你选择,这就省掉了每次你去想应该用哪种 type,非常方便。

全局模式下,需要 ~/.czrc 配置文件, 为 commitizen 指定 Adapter, 如果你不需要生成 Change Log 可以不用去处理。

只要用了 Commitizen ,就很方便的就规范的大家的 message 。

在 commit message 里用 emoji

在 git commit 上使用 emoji 提供了一种简单的方法,仅通过查看所使用的表情符号来确定提交的目的或意图, 得提交记录非常好理解,阅读体验非常棒。

图片

使用方法

git commit 时直接在注释中写入表情符号的代码部分即可完成表情 emoji 的提交。

举个栗子:

$ git commit -m ':tada: init commit'
$ git commit -m 'added image to repo :art:'

如果你用 Commitizen,可能不太好把 emoji 放在最前面,因为咱们操作的空间,就在 git cz 后第三次交互提示,也就是在输入 header 的 subject 的时候填入,如果是这样,可以选择把表情放到最后。

效果展示:图片

如果你们团队是一个喜欢用 emoji 的团队,其实可以不用遵循上面的一节的规范,因为 emoji 已经可以表达出 header 的 type 的作用了,直接在 emoji 后面加描述即可。

emoji 表情库

emojiemoji 代码commit 说明
🎉 (庆祝):tada:初次提交
🆕 (全新):new:引入新功能
🔖 (书签):bookmark:发行/版本标签
🐛 (bug):bug:修复 bug
🚑 (急救车):ambulance:重要补丁
🌐 (地球):globe_with_meridians:国际化与本地化
💄 (口红):lipstick:更新 UI 和样式文件
🎬 (场记板):clapper:更新演示/示例
🚨 (警车灯):rotating_light:移除 linter 警告
🔧 (扳手):wrench:修改配置文件
➕ (加号):heavy_plus_sign:增加一个依赖
➖ (减号):heavy_minus_sign:减少一个依赖
⬆️ (上升箭头):arrow_up:升级依赖
⬇️ (下降箭头):arrow_down:降级依赖
⚡️ (闪电)
🐎 (赛马):zap:
:racehorse:提升性能
📈 (上升趋势图):chart_with_upwards_trend:添加分析或跟踪代码
🚀 (火箭):rocket:部署功能
✅ (白色复选框):white_check_mark:增加测试
📝 (备忘录)
📖 (书):memo:
:book:撰写文档
🔨 (锤子):hammer:重大重构
🎨 (调色板):art:改进代码结构/代码格式
🔥 (火焰):fire:移除代码或文件
✏️ (铅笔):pencil2:修复 typo
🚧 (施工):construction:工作进行中
🗑 (垃圾桶):wastebasket:废弃或删除
♿️ (轮椅):wheelchair:可访问性
👷 (工人):construction_worker:添加 CI 构建系统
💚 (绿心):green_heart:修复 CI 构建问题
🔒 (锁):lock:修复安全问题
🐳 (鲸鱼):whale:Docker 相关工作
🍎 (苹果):apple:修复 macOS 下的问题
🐧 (企鹅):penguin:修复 Linux 下的问题
🏁 (旗帜):checkered_flag:修复 Windows 下的问题
🔀 (交叉箭头):twisted_rightwards_arrows:分支合并

如何在命令行中显示 emoji

默认情况下,在命令行中并不会显示出 emoji, 仅显示 emoji 代码。不过可以使用 emojify 使得在命令行也可显示 emoji, 它是一个 shell 脚本,安装与使用都很简单,在这里[4] 查看更详细的如何安装与使用。

安装 emojify

$ sudo sh -c "curl https://raw.githubusercontent.com/mrowa44/emojify/master/emojify -o /usr/local/bin/emojify && chmod +x /usr/local/bin/emojify"

使用 emojify

$ emojify "Hey, I just :raising_hand: you, and this is :scream: , but here's my :calling: , so :telephone_receiver: me, maybe?"

显示效果:图片

在使用 git bash 的时候,设置替换日志中的表情符号代码

$ git log --oneline --color | emojify | less -r

或者设置 git log 命令别名

$ alias gitlog='git log --oneline --color | emojify | less -r'$ gitlog

效果如下:图片

是不是很好玩,快去试试吧!

参考资料

  • git-emoji-guide[5]

  • git commit 时使用 Emoji ?[6]

参考资料

[1] Angular 团队所用的准则: https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines

[2] Conventional Commits specification: https://link.zhihu.com/?target=https%3A//conventionalcommits.org/

[3] 见 github 地址: https://github.com/commitizen/cz-cli

[4] 这里: https://github.com/mrowa44/emojify

[5] git-emoji-guide: https://hooj0.github.io/git-emoji-guide/

[6] git commit 时使用 Emoji ?: https://zhuanlan.zhihu.com/p/29764863

推荐阅读

我的公众号能带来什么价值?(文末有送书规则,一定要看)

每个前端工程师都应该了解的图片知识(长文建议收藏)

为什么现在面试总是面试造火箭?


http://chatgpt.dhexx.cn/article/TPbwVvWS.shtml

相关文章

从git记录中删除大文件

大家一定遇到过在使用Git时&#xff0c;不小心将一个很大的文件添加到库中&#xff0c;即使删除&#xff0c;记录中还是保存了这个文件。以后不管是拷贝&#xff0c;还是push/pull都比较麻烦。今天将工程上传到github时&#xff0c;发现最大只能上传100MB大小文件&#xff0c;在…

git基本操作(入门级)

写在前面&#xff1a;初次接触git&#xff0c;便想到之前工作&#xff0c;下载跨平台通信库ACL的源代码时的gitHub&#xff0c;于是便借助互联网弄清楚了它们的区别&#xff08;不过仅供参考&#xff09;。 关于Git和github区别的参考地址&#xff1a;http://blog.csdn.net/qq_…

一篇文章,让你彻底学会Git

文章目录 1. 版本控制1.1 常见的版本控制工具1.2 版本控制分类1.3 Git与SVN的主要区别 2. Git介绍1.1 Git 功能特点1.2 Git 和 GitHub 的区别 2. Git 环境配置2.1 软件下载2.2 启动Git2.3 Git配置2.3.1 设置用户名与邮箱 3.Git基本理论3.1 三个区域3.2 工作流程 4. Git 项目搭建…

Git-如何写好一条提交信息

Git-如何写好一条提交信息 本文为翻译文章 原文&#xff1a; How to Write a Git Commit Message 作者&#xff1a; cbeams 1.为什么好的提交信息很重要 如果你曾经打开过任意一个Git仓库的提交历史&#xff0c;你可能会发现它们的提交信息多多少少会有些混乱。 请比较下面两个…

GIT的相关内容

概述 git是一个版本管理工具,它是用于管理对应的代码的版本的。它是一个集中式的代码管理工具(支持分布式)。相同的软件还有svn(集中式版本管理工具,它不具备分布式的功能) svn及git的区别 了解git及svn的区别 Git是分布式的,SVN是集中式的Git复杂概念多,SVN简单易上…

长达万字的git常用指令总结(适合小白及在工作中想要对git基本指令有所了解的人群)建议收藏

本篇文章将对git在工作和学习中需要用到的大部分常用指令作详细解答&#xff0c; 觉得有用的C友们可以点个赞支持一下&#xff0c;你们的支持就是我最大的动力~ 本文总结自廖雪峰老师的文档 欢迎大家关注我的公众号&#xff1a;Smooth前端成长记录 公众号同步更新CSDN博客内容…

Git入门到实战

一、Git 基础 1、什么是Git Git是一个分布式版本控制系统。 版本控制系统是一种用于记录一个或多个文件内容变化&#xff0c;方便我们查阅特定版本修订情况的系统。 示例&#xff1a; 以前在没有使用版本控制的时候&#xff0c;我们通常在我们的项目根目录下这样命名项目&am…

git操作笔记

查询git命令 $ git --help 概述 Git是开源的分布式版本控制系统&#xff0c;git可以有效、高速地处理从很小到非常大的项目版本管理。 git 瘦身 解决 .git文件夹过大的问题&#xff0c; .git文件主要用来记录每次提交的变动&#xff0c;当我们的项目越来越大的时候&#xff0…

Git相关使用

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版&#xff0c;配图更多&#xff0c;CSDN博文图片需要手动上传&#xff0c;因此文章配图较少&#xff0c;看不懂的可以去菜鸡博客参考一下配图&#xff01; 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

cmd命令安装python第三方库_Python如何安装第三方库

Python如何安装第三方库 [版权申明] 非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/cdpxc/article/details/108808780 出自:cdpxc 注:笔者是在D盘直接安装了Anaconda (https://www.anaconda.com/)并非直接安装的Python (https://www.python.org/downloads/)…

基于区块链的数字版权保护介绍

一、数字版权定义&#xff1a; 各类出版物、信息资料的网络出版权&#xff0c;可以通过新兴的数字媒体传播内容的权利。包括制作和发行各类电子书、电子杂志、手机出版物等的版权。 各国家对于数字版权作品的定义不一。以中国为例&#xff0c;主要数字版权作品包括以电子图书、…

2018年博客之星,需要您宝贵的一票!

很荣幸入选了CSDN博客之星候选&#xff0c;既然入选了&#xff0c;那么我还是想全力以赴&#xff01;虽然比不上其他大佬那么优秀&#xff0c;但还是希望大家多多支持&#xff01; 请投 003 号&#xff1a;LovelyBear2019 一票 投票地址 https://bss.csdn.net/m/topic/blog_…

方波中的毛刺

在FPGA设计中&#xff0c;经常要对外部输入的信号捕捉上升沿。 在某些设计中&#xff0c;外部输入信号为方波信号&#xff0c;由比较器输出。 如上图&#xff0c;比较器输出方波后&#xff0c;电路设计欠佳&#xff0c;产生抖动&#xff0c;下降沿产生毛刺&#xff0c;如果FPG…

html版权登记怎么打,版权符号怎么输入_Html版权符号怎么打

版权符号怎么输入 版权符号©的4种输入方法 版权符号©有很多种方法可以实现,如下: ??1、按住Alt键不放,然后输入169。松开Alt键后,就可以打出©号来,此法只适合于Win2000或Win2000以上的版本。(特别注意:输入的这些数字必须使用键盘右边的那些数字键才有效…

面试官让我聊聊jmeter性能全流程测试,我忍不住哭了

做性能测试的步骤 1、服务器性能监控 首先要在对应服务器上面安装性能监控工具&#xff0c;比如linux系统下的服务器&#xff0c;可以选择nmon或者其他的监控工具&#xff0c;然后在jmeter模拟场景跑脚本的时候&#xff0c;同时启动监控工具&#xff0c;这样就可以获得jmeter…

JMeter压测常见面试问题

1、JMeter可以模拟哪些类型的负载&#xff1f; JMeter可以模拟各种类型的负载&#xff0c;包括但不限于Web应用程序、API、数据库、FTP、SMTP、JMS、SOAP / RESTful Web服务等。这使得JMeter成为一个功能强大且灵活的压力测试工具。 2、如何配置JMeter来进行分布式压力测试&a…

首网推荐!自动化测试——频次最高的23道jmeter面试题及答案!

全B站仅此一家&#xff01;Jmeter接口测试&#xff0c;学到就是赚到&#xff01; 1、解释什么是JMeter&#xff1f; JMeter是一款Java开源工具&#xff0c;用于性能负载测试。它旨在分析和衡量Web应用程序和各种服务的性能和负载功能行为。 2、说明JMeter的工作原理&#xff1f…

面试题---jmeter

面试中遇到的问题&#xff1a; 1. 如何使用Jmeter进行并发测试 2. 如何设置并发量为1000 3. 如果http请求每个都不一样&#xff0c;如何配置 4. 如何设置sessionID 一、安装配置 1. 在Terminal中输入命令&#xff1a; ruby -e "$(curl -fsSL https://raw.githubuse…

9月最新Jmeter面试题

1、Jmeter的关联用到了哪些方法去实现 接口的响应结果通常为 html 和 Json 格式的数据&#xff0c;主要会用到正则提取器、Json 提取器、Xpath 器以及边界值提取器&#xff0c;还有 beanshell 来进行数据的提取。 对于 html 这种响应结果我们通常会用正则或者是 Xpath 来进行…

jmeter面试题及答案(jmeter接口自动化测试面试题)

JAVA面试试题 是啊&#xff0c;java程序开发是吗&#xff1f; 如果自己以前学过编程的话&#xff0c;应该知道考这的话&#xff0c;就是一些基础的语法知识&#xff0c;然后给一个运用性的来让你编程和调试程序。你应聘的是哪个职业,要想清楚的,到迅雷上面可以下载很多很多,推…