Git工作流和Commit规范

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

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

相关文章

【NGINX--5】身份验证

1、HTTP 基本身份验证 需要通过 HTTP 基本身份验证保护应用或内容。 生成以下格式的文件&#xff0c;其中的密码使用某个受支持的格式进行了加密或哈希处理&#xff1a; # comment name1:password1 name2:password2:comment name3:password3第一个字段是用户名&#xff0…

紫光展锐V8821荣获“中国芯”重大创新突破产品奖

近日&#xff0c;“中国芯”优秀产品评选落下帷幕&#xff0c;紫光展锐首颗5G IoT-NTN卫星通信SoC芯片V8821凭借在卫星通信前沿领域的技术创新&#xff0c;从285家芯片企业、398款芯片产品中脱颖而出&#xff0c;荣获第十八届“中国芯”年度重大创新突破产品奖。 “中国芯”优…

ReentrantLock源码解析

ReentrantLock源码解析 文章目录 ReentrantLock源码解析一、ReentrantLock二、ReentrantLock 的 Sync、FairSync、NonfairSync2.1 Sync、FairSync、NonfairSync2.2 NonfairSync 下的 tryAcquire2.3 FairSync下的 tryAcquire2.4 tryRelease 三、lock.lock()3.1 NonfairSync.lock…

优橙内推青海专场——5G网络优化(中高级)工程师

可加入就业QQ群&#xff1a;801549240 联系老师内推简历投递邮箱&#xff1a;hrictyc.com 内推公司1&#xff1a;浙江明讯网络技术有限公司 内推公司2&#xff1a;南京华苏科技有限公司 内推公司3&#xff1a;杭州华星创业通信技术有限公司 浙江明讯网络技术有限公司 浙江明…

4.常见面试题--操作系统

特点&#xff1a;并发性、共享性、虚拟性、异步性。 Windows 和 Linux 内核差异 对于内核的架构⼀般有这三种类型&#xff1a; ● 宏内核&#xff0c;包含多个模块&#xff0c;整个内核像⼀个完整的程序&#xff1b; ● 微内核&#xff0c;有⼀个最⼩版本的内核&#xff0…

名字大却不中用的AI大模型,名不副实

这两天 OpenAI 团队&#xff08; ChatGPT 公司&#xff09;的戏比较多&#xff0c;两三天的功夫&#xff0c;剧情发展都超出了 OpenAI 首席科学家的预期&#xff0c;目前来看&#xff0c;微软还是最大的赢家。这是个引子&#xff0c;这个话题&#xff0c;网络上早已传烂了&…

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

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

6.3.WebRTC中的SDP类的结构

在上节课中呢&#xff0c;我向你介绍了sdp协议&#xff0c; 那这节课呢&#xff0c;我们再来看看web rtc中。是如何存储sdp的&#xff1f;也就是sdp的类结构&#xff0c;那在此之前呢&#xff1f;我们先对sdp的内容啊&#xff0c;做一下分类。因为在上节课中呢&#xff0c;虽然…

Python+jieba+wordcloud实现文本分词、词频统计、条形图绘制及不同主题的词云图绘制

目录 序言&#xff1a;第三方库及所需材料函数模块介绍分词词频统计条形图绘制词云绘制主函数 效果预览全部代码 序言&#xff1a;第三方库及所需材料 编程语言&#xff1a;Python3.9。 编程环境&#xff1a;Anaconda3&#xff0c;Spyder5。 使用到的主要第三方库&#xff1a;…

python之pyqt专栏1-环境搭建

#python pyqt# python&#xff1a;3.11.6 pycharm&#xff1a;PyCharm Community Edition 2023.2.5 pyqt6 python安装 官网下载&#xff1a;Python Releases for Windows | Python.org pycharm社区版安装 官网地址&#xff1a;Download PyCharm: Python IDE for Professional…

golang学习笔记——创建项目

创建项目 从Go 1.8开始&#xff0c;将GOPATH设置为环境变量不是必需的。如果我们没有设置一个&#xff0c;Go使用默认的GOPATH为$HOME/go。可以使用go env查看环境变量信息。 创建项目 # 创建项目目录 mkdir helloLog cd helloLog # 使用go mod初始化项目,生成go.mod文件 go…

TikTok shop印尼重启电商征程:与当地平台合作开启新篇章!——站斧浏览器

经历了一个半月的间隔&#xff0c;TikTok Shop成功重返印度尼西亚市场。据国际媒体报道&#xff0c;TikTok计划通过与印尼本地电子商务平台的合作&#xff0c;重启其在该国的电商业务。 Temmy Satya Permana&#xff0c;印尼合作社和中小企业部的官员&#xff0c;证实了这一重…

【广州华锐互动】VR线上课件制作软件满足数字化教学需求

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在教学领域的应用逐渐成为趋势。其中&#xff0c;广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段&#xff0c;使得VR教学成为可能&#xff0c;极大地丰…

thinkphp6 不支持:redis错误

起因&#xff1a; 使用 redis 时候&#xff0c;thinkphp 报错。 解决方法&#xff1a; 打开 php.ini 文件&#xff0c;增加 extensionphp_redis.dll 即可

Java架构师发展方向和历程

目录 1 导论2 架构师的三观培养3 架构师的遇到的困难4 架构师职责5 架构师之路6 架构师的发展方向7 应用领域架构师8 业务架构师9 系统架构师和企业架构师10 技术路线和演进规划11 一线大厂的技术生态拓张案例12 如何推进项目落地想学习架构师构建流程请跳转:Java架构师系统架…

CUDA与GPU编程

文章目录 CUDA与GPU编程1. 并行处理与GPU体系架构1.1 并行处理简介1.1.1 串行处理与并行处理的区别1.1.2 并行处理的概念1.1.3 常见的并行处理 1.2 GPU并行处理1.2.1 GPU与CPU并行处理的异同1.2.2 CPU的优化方式1.2.3 GPU的特点 1.3 环境搭建 CUDA与GPU编程 1. 并行处理与GPU体…

城市管理实景三维:打造智慧城市的新引擎

城市管理实景三维&#xff1a;打造智慧城市的新引擎 在城市管理领域&#xff0c;实景三维技术正逐渐成为推动城市发展的新引擎。通过以精准的数字模型呈现城市真实场景&#xff0c;实景三维技术为城市决策提供了全新的思路和工具。从规划设计到交通管理&#xff0c;从环境保护到…

嵌入式系统在工业自动化中的应用

嵌入式系统在工业自动化中的应用非常广泛&#xff0c;它们通过集成控制和实时响应能力&#xff0c;实现了生产线的自动化、智能化和高效化。以下将详细介绍嵌入式系统在工业自动化中的几个重要应用领域&#xff0c;并提供一些示例代码。 1. PLC&#xff08;可编程逻辑控制器&a…

【开源】基于Vue和SpringBoot的学校热点新闻推送系统

项目编号&#xff1a; S 047 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S047&#xff0c;文末获取源码。} 项目编号&#xff1a;S047&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新…

Python模块之yaml:简化配置与数据解析

更多Python学习内容&#xff1a;ipengtao.com YAML&#xff08;YAML Aint Markup Language&#xff09;是一种人类可读的数据序列化格式&#xff0c;常用于配置文件和数据传输。在Python中&#xff0c;可以使用PyYAML模块来处理YAML格式的数据。本文将深入介绍PyYAML的基础用法…