Git指导:提交干净的commit信息

为什么我们应该关心编写干净的提交消息?

提交是程序员技术的有形构建块。它们充当代码的锦上添花,如果编写正确,它们会带来巨大的价值。编写良好的提交消息变得不可或缺,因为它们提供了上下文——否则一开始就不需要提交消息。

良好的提交表明开发人员是否是良好的合作者 - Peter Hutterer,Linux。

开发人员中的一个常见错误是将 Git 存储库视为备份系统。随机承诺捕获代码的当前状态可能会妨碍您在将来检查代码库时理解过去更改的能力。提交诸如“WIP”、“吃午餐”、“今天代码结束”、“我累了 AF”、“团队周末快乐”和“首先提交”之类的消息只会让你的 Git 日志变得混乱,让你的工作变得困难。了解您所做的重要承诺,因为这些消息都不包含任何附加价值。

以下是尝试提交到远程存储库时要避免的一些关键错误

切勿分别对不同文件提交更改

在查看提交历史记录或与其他团队成员协作时,单独提交对不同文件的更改可能会导致出现问题。理解变化的完整背景及其相互关系变得具有挑战性。

例如,我正在建立一个网上商店。我不应该做的是:

# Committing changes to header.js separately
git add header.js
git commit -m "Improve header layout"# Committing changes to footer.js separately
git add footer.js
git commit -m "Optimize footer design"

查看您的 Git 日志,这种提交结构可能会变得混乱,尤其是随着您的提交历史记录的增长。

提交应该清晰、简洁并组织成逻辑单元。例如,完成代码的布局部分并处理页眉和页脚部分后,在提交这些更改之前完成这些更改后,合并这些更改会更清晰:

# Staging changes to both header.js and footer.js
git add header.js footer.js# Committing related changes together
git commit -m "Enhance UI: Header and Footer Improvements"

我知道这在理论上听起来可能比在实践中容易。这就是为什么在通过压缩将这些更改合并到主分支之前,维护一个专门用于提交的私有分支是一个很好的做法。

为私有提交创建专用分支

提交代码并不一定意味着它必须成为无尽的 git 日志中的永久固定装置。将私人分支机构视为您个人程序员的画板 - 您可以自由地进行实验,而不必担心其他人审查您的工作。

想象一下场景:您正在编码,需要暂时离开一下,或者您可能要去吃晚饭。对失去当前进度的恐惧促使您提交更改 - 私人分支机构的完美用例。无论您是要结束当天的编码会议还是只是想进行自发的提交,这些更改都可以在您的私人分支中找到它们的家。

commit [commit-hash]
Author: Your Name <your.email@example.com>
Date:   [Timestamp]WIPcommit [commit-hash]
Author: Your Name <your.email@example.com>
Date:   [Timestamp]commiting before i eventually lose my filescommit [commit-hash]
Author: Your Name <your.email@example.com>
Date:   [Timestamp]about to go for dinnercommit [commit-hash]
Author: Your Name <your.email@example.com>
Date:   [Timestamp]toilet time!

在协作环境中,使私有分支的命名显而易见非常重要。因为您不能让此类提交消息出现在您的公共分支中。

无论是通过明确的分支命名还是与队友直接沟通,都要明确表明该分支的内容并不旨在作为正在进行的工作的基础。私有分支的一个好命名可以是:“private/do-not-use-this”

成为公共分支一部分的每个提交都必须体现一个精心设计、独立、可逆且描述良好的工作单元。

案例研究:开发在线商店的购物车功能

让我们看一下我们一直在开发的在线商店项目。在这种情况下,您作为前端开发人员,负责向商店添加购物车功能。您的旅程将按如下方式展开:

您通过增强购物车部分的 CSS 呈现方式开始了努力,并做出了相应的提交。随着您的进步,您向购物车引入了 JavaScript 功能,从而导致了另一次提交。在追求完美的过程中,您注意到文本对齐问题并投入时间来完善 CSS,然后进行了额外的提交。

继续您的工作,您发现并解决了与将产品添加到购物车时计数器行为相关的错误。这个快速修复也在提交中得到了体现。最后,您试图通过在单击结帐按钮时合并加载动画来提升用户体验,并以结论性提交作为结束。

现在我们看一下git日志:

commit [commit-hash-1]
Author: Your Name <your.email@example.com>
Date:   [Timestamp]Enhance CSS presentation of cart sectioncommit [commit-hash-2]
Author: Your Name <your.email@example.com>
Date:   [Timestamp]Introduce Javascript functionality to cartcommit [commit-hash-3]
Author: Your Name <your.email@example.com>
Date:   [Timestamp]Refine CSS to resolve text alignment issuecommit [commit-hash-4]
Author: Your Name <your.email@example.com>
Date:   [Timestamp]Fix counter bug related to cart behaviorcommit [commit-hash-5]
Author: Your Name <your.email@example.com>
Date:   [Timestamp]Incorporate loading animation for checkout button

如果这些更改需要与与在线商店相关的其他提交一起纳入主要功能分支,则审核过程可能会变得具有挑战性。

这是修复这些提交日志的方法

首先切换到您的功能分支:

# Checkout the feature branch named feature/cart-section
git checkout feature/cart-section

然后,将分支中的所有提交压缩private/do-not-use-thisfeature/cart-section使用单个提交消息:

# Merge and squash all commits from the private branch to the feature branch using a single commit
git merge - squash private/do-not-use-this

合并和压缩后,您需要制作一条清晰且描述性的提交消息:

编写完美提交消息的 7 个标准规则

这些规则提供了指南和最佳实践,以确保您的提交消息格式正确并传达清晰的信息。虽然具体规则可能因不同来源而异,但总体目标是增强 Git 版本控制系统内提交消息的可读性和可理解性。

规则 1:限制为 50 个字符(最多)。

在设计提交消息的主题行时,建议保持简洁和重点突出。主题行用作提交目的的快速摘要,理想情况下应限制为最多 50 个字符。

难以满足 50 个字符的限制可能表明提交的意图不够明确。提交消息应该清晰、简洁并且能够独立存在。通过遵守此字符限制,您将被迫优先考虑最关键的信息,从而使您的团队和未来的您更容易一目了然地了解变更的性质。

规则 2:仅将主题行的第一个字母大写。

撰写提交消息时,请使用标题大小写,将主题行的第一个字母大写,就像编写简洁的句子一样。将消息的其余部分(包括任何其他详细信息)保留为小写。

规则 3:不要在主题行末尾添加句号

主题行不以句点结束的原因部分是历史原因,部分是为了保持一致的风格。惯例是将主题行视为标题或命令,这就是为什么它以祈使语气编写(例如,“添加功能”或“修复错误”而不是“添加功能”或“修复错误”)。省略末尾的句号有助于强化这一惯例并保持主题行简洁。

git commit -v -m "Create the Cart Feature with a Nice Animation"

规则 4:在主题行和正文之间放置一个空行

虽然该指南可能看起来不寻常,但它植根于实用性。许多开发人员使用 Git 命令行界面,但该界面通常缺乏自动换行功能。因此,引入了有意的格式化规则,以确保一致且清晰的提交消息。

git commit -v -m "Create the Cart Feature with a Nice AnimationBody...
"

规则 5:提交正文在 72 个字符处换行

需要澄清的是,遵守本指南并不涉及传统的自动换行;而是涉及传统的自动换行。相反,这种做法是因为考虑到命令行用户可能会遇到超过 72 个字符的截断提交正文。

大多数时候,您的消息长度会超过 72 个字符。在这种情况下,建议中断文本并在下一行继续您的句子,如下面的提交消息所示:

git commit -v -m "Create the Cart Feature with a Nice AnimationEnhanced the CSS layout of the cart section, addressing text
alignment issues and refining the layout for improved aesthetics
and readability."

总之,表示要点的标准做法是使用连字符或星号,后跟一个空格。此外,保持悬挂缩进以提高组织清晰度也很重要。

规则 6:使用祈使语气

一个有价值的实践涉及在编写提交消息时具有基本的理解,即提交在实施时将实现精确的操作。以逻辑上完成句子“如果应用,此提交将......”的方式构建提交消息。例如,不要git commit -m "Fixed the bug on the layout page"使用 ❌,而是使用这个git commit -m "Fix the bug on the layout page"

换句话说,如果应用此提交,确实可以修复布局页面上的错误。

规则 7:解释“什么”和“为什么”,但不解释“如何”。

将提交消息限制为“内容”和“原因”,可以为每个更改创建简洁而信息丰富的解释。寻求“如何”实现代码的开发人员可以直接参考代码库。相反,突出显示更改的内容以及更改的理由,包括受影响的组件或区域。

案例研究:Angular 的提交消息实践

Angular 是有效提交消息传递实践的一个突出例证。Angular 团队提倡在制作提交消息时使用特定的前缀。这些前缀包括“chore:”、“docs:”、“style:”、“feat:”、“fix:”、“refactor:”和“test:”。通过合并这些前缀,提交历史记录成为了解每次提交性质的宝贵资源。

提示

请记住通过提交消息优先考虑清晰且有意义的沟通。精心设计的提交消息就像一个故事,解释“什么”、“为什么”,但不解释“如何”进行更改。请记住,您的提交历史记录是您和您的团队未来将依赖的协作资源。养成创建内容丰富、简洁且一致的提交消息的习惯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/152056.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab参数估计与假设检验(举例解释)

参数估计分为点估计和区间估计&#xff0c;在matlab中可以调用namefit()函数来计算参数的极大似然估计值和置信区间。而数据分析中用得最多的是正态分布参数估计。 例1 从某厂生产的滚珠中抽取10个&#xff0c;测得滚珠的直径&#xff08;单位&#xff1a;mm&#xff09;为x[…

asp.net闲置物品购物网系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net闲置物品购物网系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net 闲置物品购物网 二、功…

el-table 边框颜色修改 简单有效!

废话不多说&#xff0c;直接上图 &#xff08;1&#xff09;修改前的图如下&#xff1a; 以上是elementUI原组件自带的样式 &#xff08;2&#xff09;下面是修改后的边框图如下&#xff1a; 源码如下&#xff1a; <el-table :data"jctableData" border size…

GitLab平台安装中经典安装语句含义解析

yum -y install policycoreutils openssh-server openssh-clients postfix 这是一个Linux命令&#xff0c;用于使用YUM包管理器安装指定的软件包。下面是对这个命令各部分的解释&#xff1a; yum&#xff1a;这是一个Linux命令行工具&#xff0c;用于管理RPM&#xff08;Red …

基于Python和Tkinter的双目相机驱动界面

文章目录 前言准备工作代码分析初始化创建按钮创建图像显示区域创建信息标签启动摄像头捕捉主函数结论效果展示 前言 本文将介绍如何使用Python和Tkinter库来创建一个简单的摄像头应用程序。这个应用程序可以打开摄像头&#xff0c;显示摄像头捕捉的图像&#xff0c;并允许用户…

DruidDataSource导致OOM问题处理

DruidDataSource导致OOM问题处理 起因分析日志分析Dump文件问题分析处理 起因 一个平凡的工作日&#xff0c;我像往常一样完成产品提出的需求的业务代码&#xff0c;突然收到了监控平台发出的告警信息。本以为又是一些业务上的 bug 导致的报错&#xff0c;一看报错发现日志写着…

sed -i 使用变量进行替换

一、替换文本的命令 1、命令&#xff1a; sed -i s/old/new/g xxx.log 例子&#xff1a;将文件1.txt中的字符串 "cores":"" 替换成字符串 "cores":"1" 命令&#xff1a;sed -i s/"cores":""/"…

Unity实现设计模式——模板方法模式

Unity实现设计模式——模板方法模式 模板模式(Template Pattern)&#xff0c; 指在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 简单说&#xff0c; 模板方法模式定义一个操作中的算法的骨架&…

ESP32设备驱动-I2C-LCD1602显示屏驱动

I2C-LCD1602显示屏驱动 1、LCD1602介绍 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。 通过前面的实例我们知道,并口方式…

Godot 脚本外置参数设置

文章目录 添加脚本设置参数bulid 一下 Godot Engine 4.2 简体中文文档 C# exports 添加脚本 设置参数 Godot 添加脚本后&#xff0c;设置参数。两种形式都可以 [Export]public int Speed { get; set; } 10;[Export]public string Name ;bulid 一下 私有变量也可以

基于Java的个性化旅游攻略系统设计与实现(源码+lw+ppt+部署文档+视频讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

公园视频监控系统如何改造?人工智能又能提供哪些帮助?

近日合肥市骆岗公园宣布正式开园&#xff0c;作为目前世界最大的城市公园&#xff0c;占地12.7万平方公里&#xff0c;如此壮观宏伟的建设&#xff0c;也吸引到了不少市民进行参观打卡。不管大型小型&#xff0c;城市里的公园都是随处可见的&#xff0c;那么&#xff0c;公园安…

模型训练环境相关(CUDA、PyTorch)

模型训练环境相关&#xff08;CUDA、PyTorch&#xff09; 1. 查看当前 GPU 所能支持的最高版本的 CUDA2. 如何判断是否安装了 CUDA3. 安装 PyTorch3.1 创建虚拟环境3.2 激活并进入虚拟环境3.3 安装 PyTorch 1. 查看当前 GPU 所能支持的最高版本的 CUDA 打开 NVIDIA 控制面板&a…

设计模式再探——模板方法模式

目录 一、背景介绍二、思路&方案三、过程1.模板方法模式简介2.模板方法模式的类图3.模板方法模式代码4.模板方法模式中的父类为抽象类&#xff0c;为什么不是接口&#xff1f;5.模板方法模式中方法级别的单一职责 四、总结五、升华 一、背景介绍 最近公司在做颗粒业务的时…

2023年中国金属涂胶板行业供需分析:销量同比增长2.8%[图]

金属涂胶板是一种将金属板材表面进行涂覆处理的产品。它通常由金属基材&#xff08;如钢板、铝板&#xff09;和胶粘剂组成&#xff0c;胶粘剂可以是有机胶粘剂、聚合物胶粘剂或其他特殊胶粘剂。 金属涂胶板行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&…

【C语言】Linux平台下解析pcap文件

开发环境是readhat、ubuntu、kali 在wireshark上抓包需要使用 Wireshark/tcpdump/ 且 文件后缀名为.pcap 方式保存 效果如下&#xff1a; 引入俩文件如下。 my_pcap.h #pragma once #include <netinet/in.h>#define PCAP_MAGIC 0xa1b2c3d4typedef struct pcap_file_he…

公众号突破注册操作流程

一般可以注册多少个公众号&#xff1f;众所周知&#xff0c;在2013年前后&#xff0c;公众号申请是不限制数量的&#xff0c;后来企业开始限制申请50个&#xff0c;直到2018年的11月tx又发布&#xff0c;其中个人主体可申请公众号由2个调整为1个&#xff0c;企业主体由50个调整…

全场景流量验证系统 | 京东物流技术团队

本文介绍了一种基于线上流量实现对重构系统进行功能和性能验证的实践方案。针对线上流量如何拦截、如何录制、如何存储、如何回放以及如何发压均作了详细说明&#xff0c;为具有类似需求的读者提供了一种可供参考的思路。 1 业务背景 随着百川项目的启动&#xff0c;中台需要…

机器人中的数值优化(二十一)—— 伴随灵敏度分析、线性方程组求解器的分类和特点、优化软件

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

漏刻有时数据可视化Echarts组件开发(43)水球图svg温度计动画

SVG是一种用XML定义的语言&#xff0c;用来描述二维矢量及矢量/栅格图形。具体来说&#xff0c;SVG图形是可伸缩的矢量图形&#xff0c;其图像质量不会因放大或改变尺寸而损失。 在SVG中&#xff0c;可以创建和修改图像、对图像进行搜索和索引、对其进行脚本化或压缩。此外&am…