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.mzph.cn/news/98181.shtml

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

相关文章

STM32 CubeMX ADC采集(HAL库)

STM32 CubeMX ADC采集&#xff08;HAL库&#xff09; STM32 CubeMX STM32 CubeMX ADC采集&#xff08;HAL库&#xff09;ADC介绍ADC主要特征最小识别电压值&#xff1a;2.4/4096≈0.6mv&#xff08;不考虑误差&#xff09;一、STM32 CubeMX设置二、代码部分三&#xff0c;单通道…

黑马JVM总结(二十八)

&#xff08;1&#xff09;语法糖-foreach &#xff08;2&#xff09;语法糖-switch-string &#xff08;3&#xff09;语法糖-switch-enum &#xff08;4&#xff09;语法糖-枚举类 枚举类 &#xff08;5&#xff09;语法糖-twr1

Linux登录自动执行脚本

一、所有用户每次登录时自动执行。 1、在/etc/profile文件末尾添加。 将启动命令添加到/etc/profile文件末尾。 2、在/etc/profile.d/目录下添加sh脚本。 在/etc/profile.d/目录下新建sh脚本&#xff0c;设置每次登录自动执行脚本。有用户登录时&#xff0c;/etc/profile会遍…

【Leetcode】 51. N 皇后

按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一种…

1.Linux入门基本指令

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 01.ls指令 02.pwd指令 03.cd指令 04.touch指令 05.mkdir指令(重要) 06.rmdir&&rm指令(重要) 07.man指令(重要) 08.cp指令(重要) 09.mv指令(重要) 10.cat指令 nano指令 echo指令 输出重定向 追加重…

ChatGPT是如何产生心智的?

一、前言 - ChatGPT真的产生心智了吗&#xff1f; 来自斯坦福大学的最新研究结论&#xff0c;一经发出就造成了学术圈的轰动&#xff0c;“原本认为是人类独有的心智理论&#xff08;Theory of Mind&#xff0c;ToM&#xff09;&#xff0c;已经出现在ChatGPT背后的AI模型上”…

【考研复习】union有关的输出问题

文章目录 遇到的问题正确解答拓展参考文章 遇到的问题 首次遇到下面的代码时&#xff0c;感觉应该输出65,323。深入理解union的存储之后发现正确答案是&#xff1a;67,323. union {char c;int i; } u; int main(){u.c A;u.i 0x143;printf("%d,%d\n", u.c, u.i); …

软件测试基础 - 测试覆盖率

一、覆盖率概念 覆盖率是用来度量测试完整性的一个手段&#xff0c;是测试技术有效性的一个度量。分为&#xff1a;白盒覆盖、灰盒覆盖和黑盒覆盖&#xff1b;测试用例设计不能一味追求覆盖率&#xff0c;因为测试成本随覆盖率的增加而增加。 覆盖率&#xff08;至少被执行一次…

TensorFlow入门(九、张量及操作函数介绍)

在TensorFlow程序中,所有的数据都由tensor数据结构来代表。即使在计算图中,操作间传递的数据也是Tensor tensor在TensorFlow中并不是直接采用数组的形式,它只是对TensorFlow中计算结果的引用。也就是说在张量中并没有真正保存数字,它保存的是如何得到这些数字的计算过程 一个…

解决loadDep:omelette: sill install loadAllDepsIntoIdealTree

报错信息如下&#xff1a; 解决方案&#xff1a; 1、设置为淘宝的镜像源 npm config set registry https://registry.npm.taobao.org 2、 命令检验是否成功 npm config get registry 3、继续运行npm install即可 npm install 运行效果&#xff1a;

【arm实验1】GPIO实验-LED灯的流水亮灭

linuxlinux:~/study/01-asm$ cat asm-led.S .text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R0,0X50000A28 LDR R1,[R0] 从r0为起始地址的4字节数据取出放在R1 ORR R1,R1,#(0x1<<4) 第4位设置为1 ORR R…

轻松实现视频、音频、文案批量合并,享受批量剪辑的便捷

在日常生活中&#xff0c;我们经常会需要将多个视频、音频和文案进行合并剪辑&#xff0c;以制作出符合我们需求的短视频。然而&#xff0c;这个过程通常需要花费大量的时间和精力。幸运的是&#xff0c;现在有一款名为“固乔智剪软件”的工具可以帮助我们轻松完成这个任务。 首…

文献综述|CV领域神经网络水印发展综述

前言&#xff1a;最近接触了「模型水印」这一研究领域&#xff0c;阅读几篇综述之后&#xff0c;大致了解了本领域的研究现状&#xff0c;本文就来总结一下该领域的一些基础知识&#xff0c;以飨读者。 ⚠️注&#xff1a;本文中出现的研究工作均基于计算机视觉任务开展&#x…

如何部署一个高可用高并发的电商平台

假设我们已经有了一个特别大的电商平台&#xff0c;这个平台应该部署在哪里呢&#xff1f;假设我们用公有云&#xff0c;一般公有云会有多个位置&#xff0c;比如在华东、华北、华南都有。毕竟咱们的电商是要服务全国的&#xff0c;当然到处都要部署了。我们把主站点放在华东。…

成功改派的访问学者申请建议

在申请成为访问学者时&#xff0c;成功改派是一个重要的关键步骤&#xff0c;这需要您精心策划和准备。在本文中&#xff0c;知识人网小编将为您提供一些建议&#xff0c;帮助您顺利实现申请改派成功的目标。 1.认真审视您的动机&#xff1a;在决定改派时&#xff0c;首先要仔细…

架构方法、模型、范式、治理

从架构方法、模型、范式、治理等四个方面介绍架构的概念和方法论、典型业务场景下的架构范式、不同架构的治理特点这3个方面的内容

git 同时配置 gitee github

git 同时配置 gitee github 1、 删除C:\Users\dell\.ssh目录。 在任意目录右击——》Git Bash Here&#xff0c;打开Git Bash窗口&#xff0c;下方命令在Git Bash窗口输入。 2、添加git全局范围的用户名和邮箱 git config --global user.email "609612189qq.com" …

Flink+Doris 实时数仓

Flink+Doris 实时数仓 Doris基本原理 Doris基本架构非常简单,只有FE(Frontend)、BE(Backend)两种角色,不依赖任何外部组件,对部署和运维非常友好。架构图如下 可以 看到Doris 的数仓架构十分简洁,不依赖 Hadoop 生态组件,构建及运维成本较低。 FE(Frontend)以 Java 语…

《从零开始学ARM》勘误

1. 50页 2 51页 3 236页 14.2.3 mkU-Boot 修改为&#xff1a; mkuboot 4 56页 修改为&#xff1a; 位[31&#xff1a;24]为条件标志位域&#xff0c;用f表示&#xff1b; 位[23&#xff1a;16]为状态位域&#xff0c;用s表示&#xff1b; 位[15&#xff1a;8]为扩展位域&…

HTML5+CSSday4综合案例二——banner效果

bannerCSS展示图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wi…