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

news2025/2/24 8:59:27

文章目录

  • 一.前言
  • 二.什么是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.coloradmin.cn/o/1391593.html

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

相关文章

合适的索引顺序

一.前言 正确的顺序依赖于使用索引的查询,并且同时需要考虑如何更好地满足排序和分组的需要。因为哈希或者其他类型的索引并不会像 B-Tree索引一样顺序存储数据,所以这里只针对B-Tree展开讨论。 二.合适的索引顺序 1. 概念 对于如何选择索引顺序有一个经验法则: 将选择性最…

vue3 + JS + vant 搭建移动端H5项目(完整项目)

vue3 JS vant 搭建移动端H5项目&#xff08;完整项目&#xff09; 前言1、移动端UI框架2、搭建步骤3、config.js 配置4、一键发布到服务器iis或者nginx代理5、vue3JSVant 移动端H5项目预览总结&#xff1a; 前言 要成功&#xff0c;先发疯&#xff0c;头脑简单往前冲&#x…

民营经济迎来新发展,创维汽车创始人黄宏生谈创业之道

2024年1月15日&#xff0c;上海高金金融研究院民营经济研究中心高净值研究院年度大咖论坛正式召开&#xff0c;多位来自不同行业的优秀民营企业家在本次论坛上分享企业的创新与发展之道。创维集团、创维汽车创始人黄宏生先生作为本次论坛的首位分享嘉宾&#xff0c;为其他奋斗创…

去TikTok淘金:让一部分人先富起来

“Oh My Lady Gaga&#xff01;” 一名叫杰西卡的主播在自己的TikTok直播间喊出一句话。 这跟李佳琦那句标志性的「偶买噶」有着异曲同工之妙——瞬间激起粉丝们的购买欲。 杰西卡卖的是各种各样的转运宝石和水晶&#xff0c;她的TikTok账号 dh_crystal_service a已经积累了5…

vue.js环境在window和linux安装

nodei官网&#xff1a;https://nodejs.org/en/download/ 一.windows环境下安装vue 1&#xff1a;node安装 在node.js的官网上下载node的安装包&#xff0c;下载下来之间安装即可&#xff0c;在命令行输入 npm -vnode -v 如下表示安装成功 2&#xff1a;cnpm安装 npm inst…

Kafka 集群部署

目录 1、环境准备 2、搭建ZooKeeper集群 配置文件 节点标记 环境变量 启动集群 数据同步测试 故障测试 3、搭建 Kafka 集群 配置文件 环境变量 配置其他机器 启动服务 4、集群测试 创建 Topic 显示 Topic 配置 创建 Producer 创建consumer 删除Topic 查看Z…

【特征工程】分类变量:BinaryEncoder二进制编码方法详解

Binary Encoding&#xff1a;二进制编码方法详解 Binary Encoding是将每个整数表示为二进制数&#xff0c;然后按位拆分为多个二进制变量。这种方法旨在减少维度&#xff0c;同时避免了One-Hot Encoding的高维稀疏问题。 Binary encoding for categorical variables, similar …

bash shell基础命令(一)

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

php反序列化漏洞基础

一、序列化 serialize(): 序列化是将对象或类转换为字符串的过程,以便在程序运行过程中对其进行持久化存储或传输的操作。在PHP中,序列化主要用于将类对象或数组转换成字节流的形式,以便于存储在磁盘或传输到其他系统。 通过序列化,可以将对象或类转换成一串字符串,然后可…

FFmpeg之SWScale

文章目录 一、概述二、函数调用结构图三、Libswscale处理数据流程四、重要结构体4.1、SwsContext4.2、SwsFilter 五、重要函数5.1、sws_getContext5.1.1、sws_alloc_context5.1.2、sws_init_context 5.2、sws_scale5.2.1、SwsContext中的swscale()5.2.2、check_image_pointers5…

外汇天眼:外汇交易无法出金?看这篇能提高维权成功率!

天眼君经常分享一些外汇维权成功的案例&#xff0c;但是我们都知道有些投资者在维权之路上并不是一帆风顺的&#xff0c;尤其是面对一些外汇资金盘或已经跑路的黑平台。在这种情况下&#xff0c;受害者需要紧握法律武器&#xff0c;以捍卫自己的权益&#xff0c;维护合法权利。…

AMP“双系统”加持,飞凌嵌入式RK3568核心板强实时性再升级

如果要选出飞凌嵌入式最热门的几款产品&#xff0c;FET3568-C系列核心板一定榜上有名。这款高性价比的全能型核心板上市两年来已赢得了数千家客户的青睐。飞凌嵌入式也在不断对它进行升级——从“配置新增”到“100%国产化认证”再到“新系统适配”&#xff0c;以满足更多行业客…

ubuntu设置每天定时关机

ubuntu设置每天定时关机 终端输入命令&#xff1a; sudo crontab -e输入密码&#xff0c;回车。 我这里使用nano作为编辑器&#xff0c;你可以选择vim。 在末尾输入以下命令&#xff1a; 59 23 * * * sudo -u root shutdown now设置&#xff1a;每天23:59分&#xff0c;电脑…

防微博 java web源代码

以下是我的防微博代码 源代码链接https://pan.baidu.com 提取码&#xff1a;5555 注意将这里的数据库用户名和数据库密码进行合适的修改。 关注并回复“防微博系统数据库”即可获取数据库。

【leetcode题解C++】707.设计链表 and 19.删除链表的倒数第N个结点

707.设计链表 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则还需要属性 prev 以指示链表…

通过ssh链接到群晖后台操作洗白

本篇适合二合一系统因各种原因不想进PE修改的 洗白进阶操作&#xff0c;需要对Linux的命令有基本的了解&#xff0c;如果完全不懂&#xff0c;建议不要按此方法操作&#xff0c;请看常规流程&#xff01; 群晖洗白引导修复所用工具 请先提前下载解压缩好 下载地址https://ww…

数据库视图索引练习

学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;SC (Sno, Cno, Score)…

Android 12.0 framework层实现app默认全屏显示

1.前言 在12.0的系统rom定制化开发中,在对于第三方app全屏显示的功能需求开发中,需要默认app全屏显示,针对这一个要求,就需要在系统启动app的过程中,在绘制app阶段就设置全屏属性,接下来就实现这个功能 效果图如下: 2.framework层实现app默认全屏显示的核心类 framewor…

C# wpf 获取控件刷新的时机

文章目录 前言一、为何要获取刷新时机&#xff1f;例子一、隐藏控件后截屏例子二、修改控件大小后做计算 二、如何实现&#xff1f;1.使用动画2.使用TaskCompletionSource 三、完整代码四、使用示例1、隐藏工具条截屏2、修改宽高后获取ActualWidth、ActualHeight 总结 前言 做…

LV.13 D10 Linux内核移植 学习笔记

具体实验步骤在lv13day10 实验十 一、Linux内核概述 1.1 内核与操作系统 内核 内核是一个操作系统的核心&#xff0c;提供了操作系统最基本的功能&#xff0c;是操作系统工作的基础&#xff0c;决定着整个系统的性能和稳定性 操作系统 操作系统是在内核的基础上添…