带你解析git的基础功能(二)

news/2024/2/25 13:36:01/文章来源:https://blog.csdn.net/qq_45726327/article/details/135628566

文章目录

  • 一.前言
  • 二.什么是git的分支管理
  • 三.git的分支管理的相关操作
    • 3.1 创建分支
    • 3.2 切换分支
    • 3.3 合并分支 和合并冲突
    • 3.4 删除分支
  • 四.分支管理策略
    • 第一种分支策略
    • 第二种分支策略
  • 总结

一.前言

掌握 Git 分⽀管理,从分⽀创建,切换,合并,删除的整个⽣命周期,灵活进⾏各种场景下的分⽀管理,学习常⻅分⽀管理策略。

二.什么是git的分支管理

Git 的分支管理是 Git 的核心功能之一。它允许您在同一 Git 仓库中跟踪多个工作流程。
为什么需要分支管理,假设这个宇宙的你,正在看动漫,另一个宇宙的你正在拯救全人类。如果两个宇宙互不干扰,你既拯救了世界,也看了动漫。岂不两全其美。我们在不同的时间线做了不同的事情,然后我们再把相同的时间线合并以后,就能完成两件事情。
拿到git里面来说,我们在不同的分支不断开发不同的版本,时间线不断的往前推进。master的分支越来越多,我们就需要对分值进行管理,也就是合并和删除操作。
在这里插入图片描述

每次提交,master分⽀都会向前移动⼀步,这样,随着你不断提交,master分⽀的线也越来越长,而 HEAD只要⼀直指向master分支即可指向当前分支。

三.git的分支管理的相关操作

3.1 创建分支

例如要创建分支,您可以使用 git branch 命令。

git branch <branch_name>

例如,要创建一个名为 feature 的分支,您可以使用以下命令:

git branch feature

这将创建一个新的分支,并将其指向当前分支的最新提交。
下面就是新建dev分支的图示:
在这里插入图片描述

3.2 切换分支

那如何切换到 dev 分⽀下进⾏开发呢?
要切换分支,您可以使用 git checkout 命令。

git checkout <branch_name>

例如,要切换到 feature 分支,您可以使用以下命令:

git checkout feature

这将切换到 feature 分支,并将工作目录中的文件更改为该分支的最新状态。
就比如我要切换到刚刚我创建的dev分支中。
在这里插入图片描述
另外我们发现切换分支之后,HEAD指向dev。
在这里插入图片描述

3.3 合并分支 和合并冲突

知道如何切换分支之后,我们来看看我们怎么合并分支,不过不能用简单的命令来。我用一个例子来说明。
我们在Dev环境中修改本地文件,然后再切换主节点,再次查看文件会发生什么,是同步还是不同步,让我们试试吧。
在这里插入图片描述
大家很明显可以看到,我在dev分支上更新的文件,并没有在master分支更新。为什么会出现这种现象呢?
大家可以查看dev和master分支指向。
在这里插入图片描述
这里明显可以看出指向操作是不一样的。状态图如下:
在这里插入图片描述
当切换到 master 分⽀之时,HEAD 就指向了 master,所以我们自然就看不见了。

说了为什么之后,我们就开始进行分支的合并操作。就是在master分支上看到Dev分支的内容了。

3.1 创建分支
要创建分支,您可以使用 git branch 命令。

git branch <branch_name>
例如,要创建一个名为 feature 的分支,您可以使用以下命令:

git branch feature
这将创建一个新的分支,并将其指向当前分支的最新提交。

3.2 切换分支
要切换分支,您可以使用 git checkout 命令。

git checkout <branch_name>
例如,要切换到 feature 分支,您可以使用以下命令:

git checkout feature
这将切换到 feature 分支,并将工作目录中的文件更改为该分支的最新状态。

3.3 合并分支
要合并分支,您可以使用 git merge 命令。

git merge <branch_name>

我们知道了什么命令之后,我们就开始操作。
在这里插入图片描述
之后,我们再来看一下状态图的变化。
在这里插入图片描述

上述这种情况只是一种情况,知识分支线有修改的情况下,但如果master和dev都同时修改了,我们再合并之后,会出现什么现象呢?大家不妨来操作一下。
在dev 的ReadMe的文件中增加 write bbb dev
在这里插入图片描述
在master 中增加 write bbb master
在这里插入图片描述
状态图如下:
在这里插入图片描述
然后我们开始合并操作
在这里插入图片描述
这时候我们就看到提示我们的合并冲突。
此时我们必须要⼿动调整冲突代码,并需要再次提交修正后的结果!!
在这里插入图片描述

状态图如下:

在这里插入图片描述

3.4 删除分支

合并完成后, dev 分⽀对于我们来说就没⽤了, 那么dev分⽀就可以被删除掉。
注意:如果当前正处于某分⽀下,就不能删除当前分⽀.
要删除分支,您可以使用 git branch -d 命令。

git branch -d <branch_name>

在这里插入图片描述
状态图如下:
在这里插入图片描述

四.分支管理策略

分支管理策略是指在 Git 中使用分支的最佳实践。不同的项目有不同的需求,因此没有一种适合所有项目的分支管理策略。

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢? 干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以团队合作的分支看起来就像这样。
在这里插入图片描述

我这里用具体的场景去分析分支管理策略。

第一种分支策略

例如我们现在正在 dev2 分支上进行开发,开发到一半,突然发现 master 分支上面有 bug,需要解决。可现在 dev2 的代码在工作区中开发了一半,还无法提交,怎么办?
例如:
在这里插入图片描述

我们的解决方案是:
在Git中,每个bug 都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
在开始解决bug之前Git 提供了 git stash 命令,可以将当前的⼯作区信息进⾏储藏,被储藏的内容可以在将来某个时间恢复出来。
在这里插入图片描述

储藏 dev2 ⼯作区之后,由于我们要基于master分⽀修复 bug,所以需要切回 master 分⽀,再新
建临时分⽀来修复 bug,⽰例如下:
在这里插入图片描述
修复完成后,切换到 master 分⽀,并完成合并
在这里插入图片描述

最后删除分支:
在这里插入图片描述
合并工作完成后,我们的开发工作还要进行,这个时候,我们就需要把dev存在临时空间里面的内容取出来,继续开发。
我们使用 git stash pop 命令,恢复的同时会把 stash 也删了。
在这里插入图片描述
恢复完成之后,我们完成提交即可。
在这里插入图片描述

此时的状态变化图:
在这里插入图片描述

看着此时的状态变化图,我们注意到了,修复 bug 的内容,并没有在 dev2 上显示。
所以我们最终的目的还是要master分支和dev分支一起合并,前面我们介绍的要切换到master分支直接进行合并,但这样其实是有风险的。风险是什么,大家也很清楚,我们会引起合并冲突,而冲突需要我们手动修改代码。如果我们直接在maste分支上去修改,没有得到解决,就会导致错误出现在master分支上,后果不可设想,具体的状态图如下。
在这里插入图片描述

第二种分支策略

我们要解决上述这个问题,就开始了第二种分支策略,如何解决这个问题的方案如下:
第一步:自己的分支上合并下 master ,而不影响 master 。具体的分支图如下:
在这里插入图片描述
第二步:再让 master 去合并dev ,这样做的目的是有冲突可以在本地分⽀解决并进⾏测试。
在这里插入图片描述
具体的操作如下:
第一步:
在这里插入图片描述
第二步:

在这里插入图片描述
最后查看文件是否合并成功
在这里插入图片描述

总结

说了这么多,我们也到了分支管理首尾的时候了,大家一路走过来,发现了分支的作用了吗?要我说分支最大的作用就是分工,比如开发一个项目,你们如果在一个分支上面写,他就要等你写完,然后他才能写,有了分支之后,我们就可以多条线发展,你写你的,他写他的,互不干涉,直到开发完毕后,再一次性合并到原来的分支上,这样效率高,又不会影响整个项目的完成进度。

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

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

相关文章

Visual Studio 2019 ctrl+f 呼出查找和替换窗口

有时候 ctrlshiftf 呼出查找和替换窗口不起作用&#xff0c;可能和其它程序的快捷键冲突&#xff0c;解决方案&#xff1a; ------------英文版本------------ 依次点击VS菜单栏中的 Tools - Options - Environment - Keyboard: 1. 在右侧的 Show commands containing: 文本框输…

【深度学习】RTX2060 2080如何安装CUDA,如何使用onnx runtime

文章目录 如何在Python环境下配置RTX 2060与CUDA 101. 安装最新的NVIDIA显卡驱动2. 使用conda安装CUDA Toolkit3. 验证onnxruntime与CUDA版本4. 验证ONNX需求版本5. 安装ONNX与onnxruntime6. 编写ONNX推理代码 如何在Python环境下配置RTX 2060与CUDA 10 RTX 2060虽然是一款较早…

Android PendingIntent 闪退

先来给大家推荐一个我日常会使用到的图片高清处理在线工具&#xff0c;主要是免费&#xff0c;直接白嫖 。 有时候我看到一张图片感觉很不错&#xff0c;但是图片清晰度不合我意&#xff0c;就想有没有什么工具可以处理让其更清晰&#xff0c; 网上随便搜下就能找到&#xff…

activiti流程图+动态表单

使用技术 jeecg-bootactivitivue3form-create 简单效果展示 流程图绘制 审批人配置 动态表单配置 流程审批 流程审批记录 填写表单信息 源码地址 后台&#xff1a;https://gitee.com/houshixin/jmg-boot前端&#xff1a;https://gitee.com/houshixin/jmg-ui

Pandas加载大数据集

Scaling to large datasets — pandas 2.1.4 documentationhttps://pandas.pydata.org/docs/user_guide/scale.html#use-efficient-datatypes官方文档提供了4种方法&#xff1a;只加载需要的列、转化数据类型、使用chunking&#xff08;转化文件存储格式&#xff09;、使用Dask…

计算机导论06-人机交互

文章目录 人机交互基础人机交互概述人机交互及其发展人机交互方式人机界面 新型人机交互技术显示屏技术跟踪与识别&#xff08;技术&#xff09;脑-机接口 多媒体技术多媒体技术基础多媒体的概念多媒体技术及其特性多媒体技术的应用多媒体技术发展趋势 多媒体应用技术文字&…

DataXCloud部署与配置[智数通]

静态IP设置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.18.130 NETMASK255.255.255.0 GATEWAY192.168.18.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

bash shell基础命令(一)

1.shell启动 shell提供了对Linux系统的交互式访问&#xff0c;通常在用户登录终端时启动。系统启动的shell程序取决于用户账户的配置。 /etc/passwd/文件包含了所有用户的基本信息配置&#xff0c; $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash ...例如上述root账户信…

多级缓存架构(二)Caffeine进程缓存

文章目录 一、引入依赖二、实现进程缓存1. 配置Config类2. 修改controller 三、运行四、测试 通过本文章&#xff0c;可以完成多级缓存架构中的进程缓存。 一、引入依赖 在item-service中引入caffeine依赖 <dependency><groupId>com.github.ben-manes.caffeine…

热门护眼台灯深度测评,飞利浦、米家、书客护眼灯哪家强?

或许大家已经留意到了&#xff0c;如今佩戴眼镜的儿童越来越多&#xff0c;近视的发生呈现出越来越低龄化的趋势。这一现象与电子设备的广泛应用密切相关。除了天生的近视倾向和频繁使用电子设备外&#xff0c;我们还可能忽略了光照问题对视力的潜在影响&#xff0c;护眼台灯的…

postman自动化接口测试

背景描述 有一个项目要使用postman进行接口测试&#xff0c;接口所需参数有&#xff1a; appid: 应用标识&#xff1b;sign&#xff1a;请求签名&#xff0c;需要使用HMACSHA1加密算法计算&#xff0c;签名串是&#xff1a;{appid}${url}${stamp}&#xff1b;stamp&#xff1…

肯尼斯·里科《C和指针》第6章 指针(5)概念的练习

肯尼斯里科《C和指针》第6章 指针&#xff08;1&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;2&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;3&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;4&#xff09…

云原生分布式多模架构:华为云多模数据库 GeminiDB 架构与应用实践

文章目录 前言一、GeminiDB 总体介绍1.1、华为云数据库全景图1.2、GeminiDB 发展历程1.3、GeminiDB 全球分布情况 二、GeminiDB 云原生架构2.1、核心设计&#xff1a;存算分离&多模扩展2.2、存算分离&多模扩展核心优势2.3、高可用&#xff1a;秒级故障接管2.4、弹性扩展…

Angular系列教程之单向绑定与双向绑定

文章目录 介绍单向绑定双向绑定在自定义组件中实现双向绑定属性总结 介绍 在Angular开发中&#xff0c;数据的绑定是非常重要的概念。它允许我们将应用程序的数据与用户界面进行交互&#xff0c;实现数据的动态更新。在本文中&#xff0c;我们将探讨Angular中的两种数据绑定方…

jmeter-线程数设置为1,循环10次没问题,循环100次出现异常

一、多次尝试&#xff0c;发现出现异常的接口大致相同。 解决办法&#xff1a;在第一个出现异常的接口下添加超时时间&#xff0c;固定定时器&#xff1a;2000ms&#xff0c;再次运行就没问题了。 二、压力机自身存在的问题 1&#xff09;在网络编程中&#xff0c;特别是在短…

计算机三级(网络技术)——应用题

第一题 61.输出端口S0 &#xff08;直接连接&#xff09; RG的输出端口S0与RE的S1接口直接相连构成一个互联网段 对172.0.147.194和172.0.147.193 进行聚合 前三段相同&#xff0c;将第四段分别转换成二进制 11000001 11000010 前6位相同&#xff0c;加上前面三段 共30…

Debian(Linux)局域网共享文件-NFS

NFS (Network File system) 是一种客户端-服务器文件系统协议&#xff0c;允许多个系统或用户访问相同的共享文件夹或文件。最新版本是 NFS-V4&#xff0c;共享文件就像存储在本地一样。它提供了中央管理&#xff0c;可以使用防火墙和 Kerberos 身份验证进行保护。 本文将指导…

基于grpc-java开发的普通工程在k8s内部署多实例,如何实现客户端流量的负载均衡

文章目录 1. 前言2.实现方案要点3.具体实现步骤3.1 编写一个grpc服务端程序(详细实现步骤在此忽略&#xff0c;网上很多例子)3.2 编写grpc客户端程序&#xff0c;注意指定负载均衡策略和dns:///这个URI前缀&#xff0c;如下图所示3.3 在k8s中部署服务端和客户端3.3.1 服务端部署…

Spark---累加器和广播变量

文章目录 1.累加器实现原理2.自定义累加器3.广播变量 1.累加器实现原理 累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量&#xff0c;在Executor 端的每个 Task 都会得到这个变量的一份新的副本&#xff0c;每个 task 更新这些副本的值后&…

5个99%的人可能不知道的实用程序库!

前言 作为一名前端开发者,这些 JavaScript 库极大地提高了我的工作效率,如格式化日期、处理 URL 参数和调试移动网页。朋友们,我想和你们分享这些库。 1. 使用 “Day.js” 来格式化日期和时间 链接 作为开发者,我已经厌倦了在 JavaScript 中操作日期和时间,因为它太麻烦了。…