Git工作流和Commit规范

news2024/9/27 12:17:26

Git大家都非常熟悉了,就不做过多介绍,但是如何用好Git、如何进行合理的分支开发、Merge你是否有一个规范流程呢?💤

不论是一个团队一起开发一个项目,还是自己独立开发一个项目,都少不了要和Git打交道,这些都是作为开发者必须要掌握的。每个团队也许有自己的Git工作流,今天小许给你分享一个通用的流程和规范。

既然说到Git得先有个协同原则:

统一使用Git作为版本控制的主要工具。

统一使用GitFlow流程管理控制版本

基本命令操作

git add . :将变更从工作目录移至暂存区域

git commit -m “fix: xxx” :将暂存区中的文件提交到本地仓库中分支中

git pull:用于从远程获取代码并合并本地的版本

git push:用于从将本地的分支版本上传到远程并合并

这些操作命令在各个工作区、仓库之间如何进行流转的呢?如下图
在这里插入图片描述
git有好几个区,工作区(workspace)、暂存区(indexStage)、本地仓库(local repository)、还有远程仓库(remote repository)。

远程仓库为我们保存一份代码,如github,而工作区、暂存区和本地仓库都在本地

常用分支建议
前面简单讲了下代码提交流程,但是版本控制并不是简单代码提交就完事了,这里分享一些常用的分支开发,但并不是任何项目都一定按照这种分支结构来定义,按你的需求来确定需要哪些。比如你一个人开发一个小型项目,那么就不用搞的那么复杂,如果是多人协同开发版本迭代较快,那么下面的分支内容会让你开发节奏更清晰合理!
在这里插入图片描述

生产分支(master)‌
master分支是仓库的主分支,也有人叫production分支,这个分支包含最近发布到生产环境的代码,最近发布的release, 这个分支只能从其他分支合并,不能在这个分支直接修改‌

master 分支一般由release、develop以及hotfix分支合并,任何时间都不能直接修改代码

开发分支(develop)‌
这个分支是我们的主开发分支,始终保持最新完成以及bug修复后的代码.

包含所有要发布到下一个release的代码,这个主要合并与其他分支,比如feature分支‌

一般开发的新功能时,feature分支都是基于develop分支下创建的

补丁分支(hotfix)‌
当我们在生产环境发现新的Bug时候,我们需要基于master分支创建一个hotfix分支,然后在hotfix分支上修复bug

完成hotfix后,我们要把hotfix分支合并回master和develop分支‌,所以hotfix的改动会进入下一个release

发布分支(release)‌
当你需要发布一个新功能的时候,要基于develop分支创建一个release分支

在release分支做为基准进行测试并修复bug,完成release后,把release合并到master和develop分支‌

release 分支为预上线分支,发布提测阶段,会release分支代码为基准提测

功能分支(feature)‌
feature分支主要是用来开发一个新的功能,一旦开发完成,我们合并回develop分支,然后提交合并请求到 release 分支进行提测。

分支命名: feature/ 开头的为特性分支, 命名规则: feature/user_module、 feature/cart_module

Git工作流
上面那么多种分支类型,而且不同的分支又是基于其他分支,每次看完之后都记得,但是结合起来发现仅仅停留在有印象,是的,我们不好从单纯的文字上理清分支之间的关系和合并方式。

没关系,小许用个图把之间的关系梳理清楚:
在这里插入图片描述
其实核心是要弄明白主干和各个开发分支的关系,以及你的开发分支该和谁去合并。

不过还是那句话根据自己的项目和业务团队去指定Git工作,不能为了更风去创建并不适合团队的分支,不然会导致开发在无聊的敲命令,花费时间在各种分支的合并上,反而降低了效率。

适合别人的未必适合大家,互相交流,选择合适自己的!

更多方位的流程,大家可以看看这篇文章# 字节研发设施下的 Git 工作流

Commit编写规范
好的Commit messages 日志编写会带来极大的帮助,它也反映了一个开发人员是否是良好的协作者,更重要的是在后续修复bug和实现新的feture时,对于之前实现的功能、解决的bug可以一目了然,而不用通过阅读代码去了解曾经的实现,因为这会是意见非常痛苦的事情!

忘了说,你的Commit messages会是Code Review人员参考基本,你应该不想被无情的打回吧?😅😅😅

目前,社区有多种 Commit messages 的写法规范。来自Angular (前端框架)规范是目前使用最广的写法,比较合理和系统化。

其实浏览过Github开源项目的同学,如果有注意Pull requests的话就有了解,行我我们看下Angular的提交规范到底是咋样的,为啥会成为参考标杆🚩🚩🚩。
在这里插入图片描述
Commit messages提交可以参照以下格式

<type>: <subject>
<BLANK LINE> 空白行
<body>
<BLANK LINE> 空白行
<footer>
• type: 本次 commit 的类型,诸如 bugfix docs style 等

• scope: 本次 commit 波及的范围

• subject: 简明扼要的阐述下本次 commit 的主旨,在原文中特意强调了几点 : . 使用祈使句,是不是很熟悉又陌生的一个词,来传送门在此 祈使句 . 首字母不要大写 . 结尾无需添加标点

• body: 同样使用祈使句,在主体内容中我们需要把本次 commit 详细的描述一下,比如此次变更的动机,如需换行,则使用 |

• footer: 描述下与之关联的 issue 或 break change

Commit Type的类别
• feat: 添加新特性

• fix: 修复bug

• docs: 仅仅修改了文档

• style: 仅仅修改了空格、格式缩进、都好等等,不改变代码逻辑

• refactor: 代码重构,没有加新功能或者修复bug

• perf: 增加代码进行性能测试

• test: 增加测试用例

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

Commit messages格式要求
标题行:50个字符以内,描述主要变更内容

主体内容:更详细的说明文本,建议72个字符以内。 需要描述的信息包括:

• 为什么这个变更是必须的? 它可能是用来修复一个bug,增加一个feature,提升性能、可靠性、稳定性等等

• 他如何解决这个问题? 具体描述解决问题的步骤

• 是否存在副作用、风险?

如果需要的化可以添加一个链接到issue地址或者其它文档

来看这个这位老哥在Angular项目详细的commit信息,大家可以对照上面的规范看,可以用一个词描述这种好的Commit方式【“赏心悦目”】,也许这也就是为什么这个项目的Commit会成为众多人模仿的原因吧!
在这里插入图片描述
关于名词简称
软件团队中经常需要Git进行团队协作开发,但是不少职场小宝朋友对于从大佬口中冒出来的一些字母缩略词一脸蒙蔽,比如MR、CR,这里一次说个明白,让你不再迷茫各种简称,哈哈!

这里总结了一些,

• CR:Code Review. 请求代码审查。

• PR: pull request. 拉取请求,给其他项目提交代码。

• MR: merge request. 合并请求

• ACK:Acknowledgement. 承认,同意。表示接受代码的改动。

• TL;DR:Too Long; Didn’t Read. 太长懒得看。常见于README文档。

• WIP:Work In Progress. 进展中,主要针对改动较多的 PR,可以先提交部分,标题或 Tag 加上 WIP,表示尚未完成,这样别人可以先 review 已提交的部分。

• RFC:Request For Comment. 请求进行讨论,表示认为某个想法很好,邀请大家一起讨论一下

Git命令
在文章末尾,分享一下收藏的一个非常全面的Git命令总结,分享给大家!
在这里插入图片描述

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

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

相关文章

C++学习笔记——static对象

一、static对象——累计创建了多少对象和正在使用的对象数目 static更多的是作为一个介入类的一个第三方成员变量。 声明为static的类成员称为类的静态成员&#xff0c;用static修饰的成员变量&#xff0c;称之为静态成员变量&#xff1b; 用static修饰的成员函数&#xff0c;称…

JS逆向之wasm逆向(二)

本文仅供技术交流和技术学习 不做其他用途 接着上一篇继续讲&#xff1a; 上篇地址&#xff1a; JS逆向之wasm逆向(二进制) 网址&#xff1a; aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1 这个网站我们后面可以继续讲他的debugger 和滑块…

Spring Boot 整合MyBatis-Plus 详解

MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 全新的 MyBatis-Plus 3.0 版本基于 JDK8&#xff0c;提供了 lambda 形…

【数据结构】树和二叉树详解

目录 1. 前言2. 树概念及结构2.1. 树的概念2.2. 与树有关的一些概念2.3. 树与非树2.4. 树的表示 3. 二叉树概念及结构3.1. 二叉树概念3.2. 特殊的二叉树3.3. 二叉树的性质3.4 二叉树的存储结构3.4.1 顺序存储3.4.2 链式存储 3.5 堆 1. 前言 在前面我们一起了解的数据结构有顺序…

振南技术干货集:制冷设备大型IoT监测项目研发纪实(6)

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 &#xff08;制冷设备对于便利店为何如何重要&#xff1f;了解一下你所不知道的便利店和新零售行业。关于电力线载波通信的论战。&#xff09; 2、电路设计 2.1 防护电路 2.1.1 强电防护 …

初识JVM(简单易懂),解开JVM神秘的面纱

目录 一、什么是JVM&#xff08;Java虚拟机&#xff09;&#xff1f; 二、JVM的功能 三、JVM的功能-即时编译 四、常见的JVM 五、JVM的组成 五、JVM的工作流程 参考资料 一、什么是JVM&#xff08;Java虚拟机&#xff09;&#xff1f; 在Java的世界里&#xff0c;Java虚…

【实验】配置用户自动获取IPv6地址的案例

【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等​编辑https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502【…

云贝教育 |【技术文章】PG的缓存管理器原理

PG的缓存管理器原理 缓冲区管理器管理共享内存和持久存储之间的数据传输 &#xff0c; 它会对 DBMS 的性能产生重大影响。 PostgreSQL 缓冲区管理器工作非常高效。 本章介绍 PostgreSQL 缓冲区管理器。第一部分提供概述 &#xff0c;后续部分描述以下主题&#xff1a; 缓冲…

OSG动画与声音-路径动画之导出与导入(2)

路径的导出示例 路径的导出示例的代码如程序清单10-2所示。 1. // 创建路径 2. osg::ref_ptr<osg::AnimationPath> createAnimationPath(osg::Vec3 ¢er, 3. float radius, float looptime) 4. { 5. // 创建一个Path对象 6. osg::ref_ptr<…

【史上最细教程】服务器MySQL数据库完成主从复制

文章目录 MySQL完成主从复制教程准备&#xff1a;原理&#xff1a;步骤&#xff1a; 推荐文章 MySQL完成主从复制教程 主从复制&#xff08;也称 AB 复制&#xff09;就是将一个服务器&#xff08;主服务器&#xff09;的数据复制到一个或多个MySQL数据库服务器&#xff08;从…

云安全之盾:ZStack 云主机安全防护解决方案全方位保护云环境

随着云计算的蓬勃发展&#xff0c;网络威胁愈发复杂&#xff0c;涵盖了从勒索病毒到APT攻击的各种威胁类型。在这一风云变幻的网络安全环境下&#xff0c;云主机安全不再仅仅是一个选项&#xff0c;它是信息系统安全的核心要素。云轴科技ZStack 云主机安全防护解决方案是为了满…

java项目之品牌银饰售卖平台(ssm+vue)

项目简介 主要功能包括首页、个人中心、用户管理、促销活动管理、饰品管理、我的收藏管理、系统管理、订单管理等。管理员模块: 管理员可以查询、编辑、管理每个用户的信息和系统管理员自己的信息&#xff0c;同时还可以编辑、修改、查询用户账户和密码&#xff0c;以及对系统…

项目管理套路:看这一篇绝对够用❤️

写论文必不可少的&#xff0c;就是创建代码并进行实验。好的项目管理可以让实验进行得更加顺利。本篇博客以一次项目实践为例&#xff0c;介绍项目管理的方法&#xff0c;以及可能遇到的问题&#xff0c;并提供一些可行的解决方案。 目录 项目管理工具开始第一步版本管理十分关…

微信小程序:This Mini Program cannot be opened as your Weixin version is out-of-date.

项目场景&#xff1a; 问题描述 升级基础库3.2.0&#xff0c;然后PC端整个小程序都打不开了&#xff0c;点击小程序提示”This Mini Program cannot be opened as your Weixin version is out-of-date. Update Weixin to the latest version.“&#xff0c;并且点击Update Wei…

成为AI产品经理——模型构建流程(下)

目录 1.模型训练 2.模型验证 3.模型融合 4.模型部署 上节课我们讲了模型设计、特征工程&#xff0c;这节课我们来讲模型构建剩下的三个部分&#xff1a;模型训练、模型验证和模型融合。 1.模型训练 模型训练就是要不断地训练、验证、调优直至让模型达到最优。 那么怎么达…

Linux系统装宝塔面板提示磁盘空间不足如何清理,检测到当前磁盘超过80%,空间不足如何清理

Linux系统装宝塔面板提示磁盘空间不足如何清理&#xff0c;检测到当前磁盘超过80%&#xff0c;空间不足如何清理 今天登陆服务器查看到磁盘空间满&#xff0c;如题这部分属于运维问题&#xff0c;如果直接点击 如何直接点立即清理会跳转企业版购买&#xff0c;1599CNY对普通用…

如何做一个简单的深度集成学习框架

使用同一个框架&#xff0c;独立在一个数据集上面&#xff0c;分别训练多次&#xff0c;每个单独模型训练超参数可以一样&#xff0c;也可以不一样&#xff0c;最后若干个训练好的独立模型在测试集数据上面做最后集中决策。 实例代码如下&#xff1a; class MyEnsemble(nn.Modu…

CVE-2023-6099:优卡特脸爱云一脸通智慧管理平台SystemMng.ashx接口未授权漏洞复现

文章目录 优卡特脸爱云一脸通智慧管理平台未授权SystemMng.ashx接口漏洞复现&#xff08;CVE-2023-6099&#xff09; [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 优卡特脸爱云一脸通智慧管理平台未授权…

eNSP-远程登陆实验

实验拓扑&#xff1a; 实验需求&#xff1a; 1. 如图所示&#xff0c;配置设备名称和IP地址 2. 配置R2的远程登录vty接口0-4&#xff0c;完成以下需求&#xff1a; 1&#xff09;采用接口password的验证方式&#xff0c;口令为"spoto"&#xff08;不含引号&#xf…

为何越来越多的程序员纷纷转行网络安全?

目前&#xff0c;我国IT行业的人才结构不断升级&#xff0c;公司对程序员的要求越来越高&#xff0c;出现了大量的裁员现象&#xff0c;导致很多的程序员纷纷想转行的想法。 可能对于早期的程序员而言&#xff0c;学好编程语言就能找到比较好的工作。而现在伴随着互联网的不断发…