Git分支管理

分支理解

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

​​​​在这里插入图片描述

在版本回退⾥可以知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀
个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即master分⽀。再来理解⼀下HEAD,HEAD严格来说不是指向提交,⽽是指向master,master才是指向提交的,所以,HEAD指向的就是当前分⽀。

在这里插入图片描述

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

查看分支

命令:git branch
通过这个命令可以看到当前仓库里面的所以分支
在这里插入图片描述
git中的HEAD不仅会指向master分支,也可以指向其他分支,且被HEAD指向的分支才是我们当前的工作分支,上面的 * 在那个分支前面,说明这个分支是当前的工作分支

创建分支

​命令 :git branch [分支名]
在这里插入图片描述
使用tree .git可以看到 .git中的 refs/heads 下多了一个我们所创建的分支
在这里插入图片描述
查看里面的commit id,可以发现master和dev中的是一样的,这是因为,我们创建分支的时候是根据最近一次提交的(当前最新版本)来创建的
在这里插入图片描述
在这里插入图片描述

切换分支

命令:git checkout [分支名]

#创建与切换分支可以只用一条命令
git checkout -b [新的分支名] #  -b代表如果这个分支不存在就创建

在这里插入图片描述
在这里插入图片描述
在dev分支上修改文件并提交
在这里插入图片描述
然后切换回master分支查看test3
在这里插入图片描述
可以看见在dev分支上修改的test3,并没有影响到master分支上的test3
在这里插入图片描述

合并分支

如果想要分支A去合并分支B,就需要先切换到分支A上去操作
在使用:git merge [被合并的分支名]
在这里插入图片描述
可以看到合并分支后master中的commit id和dev中的commit id相同了,说明他们指向了相同的版本在这里插入图片描述
在这里插入图片描述

删除分支

合并完成后,dev分⽀对于我们来说就没⽤了,那么dev分⽀就可以被删除掉,注意如果当前正处于某分⽀下,就不能删除当前分⽀
命令: git branch -d [分支名]
在这里插入图片描述

合并冲突

在实际分⽀合并的时候,并不是想合并就能合并成功的,有时候可能会遇到代码冲突的问题,比如在master分支中修改了一个文件,在dev分支下对相同文件的相同位置也进行了操作修改,就会导致合并的时候在同一个位置有2个不同的值,就会导致无法确定到底该保留哪一个,产生冲突,就需要我们去解决冲突

在这里插入图片描述

现在去合并的话,就会报冲突
在这里插入图片描述
这里可以看到说test3这个文件有冲突,需要解决冲突后再去进行一次提交操作
那么我们进入test3这个文件中看
在这里插入图片描述
在这里插入图片描述
效果图
在这里插入图片描述
可以用git log --graph --abbrev-commit命令像类似图表的形式查看日志,可以看到和上面效果图差不多风格的图
在这里插入图片描述

分支管理策略

通常合并分⽀时,如果可能,Git会采⽤ Fast forward 模式,就是上面没有冲突的合并模式
在这里插入图片描述
在这种 Fast forward 模式下,删除分⽀后,查看分⽀历史时,会丢掉分⽀信息,看不出来最新提
交到底是merge进来的还是正常提交的
但在合并冲突部分,我们也看到通过解决冲突问题,会再进⾏⼀次新的提交,得到的最终状态为
在这里插入图片描述
那么这就不是 Fast forward 模式了,这样的好处是,从分⽀历史上就可以看出分⽀信息。如下面的图中就能看出分支信息
在这里插入图片描述
那没有冲突的情况下如何让我们合并分支的时候也能通过git log看到图示化的合并情况,这就需要在使用 git merge --no-ff -m "提交信息" [分支名]其中的 --no-ff就是不让它使用Fast forward 模式去合并,就可以看到了 ,而-m "提交信息"就代表着合并之后要进行一次提交,就需要带上提交信息
在这里插入图片描述
在这里插入图片描述

分支策略

在实际开发中,我们应该按照⼏个基本原则进⾏分⽀管理:
⾸先,master分⽀应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活
在这里插入图片描述

⼲活都在dev分⽀上,也就是说,dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布时,再把dev分⽀合并到master上,在master分⽀发布1.0版本;
项目中的每个⼈都在dev分⽀上⼲活,每个⼈都有⾃⼰的分⽀,时不时地往dev分⽀上合并就
可以了。
所以,团队合作的分⽀看起来就像这样:
在这里插入图片描述

bug 分⽀

假如我们现在正在 dev 分⽀上进⾏开发,开发到⼀半,突然发现 master 分⽀上⾯有bug,需要解决。这种情况下我们是不能直接在master分支上直接修改的,在Git中,每个bug都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀删除

在这里插入图片描述
对于我们要解决master分支中的bug不能让dev分支中工作区内容出现在master中,就需要对正在进行开发的dev分支进行储藏
需要用到该命令:

git stash #可以将当前的⼯作区信息进⾏储藏,被储藏的内容可以在将来某个时间恢复出来 

在这里插入图片描述
不过git stash只能储藏已经被git 管理的文件,就是在git stash之前有被add,commit 操作过的文件,如果是立马新建一个文件就stash是不行的
在这里插入图片描述
在储藏dev的内容后就不会有相关的未提交提示了
在这里插入图片描述
然后就可以在master分支上创建一个修复bug的分支,在该分支上去修复bug,在在master分支上去合并该bug分支
在这里插入图片描述
修复完bug后对应正在开发的dev储藏后就需要恢复存储区的内容,就需要用到git stash pop

另外,恢复现场也可以采⽤git stash apply恢复,但是恢复后,stash内容并不删除,你需要⽤ git stash drop 来删除;
你可以多次stash,恢复的时候,先⽤ git stash list 查看,然后恢复指定的stash,⽤命令git stash apply stash@{0}
在这里插入图片描述
这里的dev分支恢复后,没有我们对master分支上修复bug后的内容, 因为dev是以master分支修复bug之前的时候创建的
在这里插入图片描述

Master 分⽀⽬前最新的提交,是要领先于新建 dev时基于的 master 分⽀的提交的,所以我们在 dev2 中当然看不⻅修复bug的相关代码。我们的最终⽬的是要让 master 合并 dev 分⽀的,那么正常情况下我们切回master 分⽀直接合并即可,但这样其实是有⼀定⻛险的。

是因为在合并分⽀时可能会有冲突,⽽代码冲突需要我们⼿动解决(在 master 上解决)。我们⽆法保证对于冲突问题可以正确地⼀次性解决掉,因为在实际的项⽬中,代码冲突不只⼀两⾏那么简单,有可能⼏⼗上百⾏,甚⾄更多,解决的过程中难免⼿误出错,导致错误的代码被合并到 master 上。
此时的状态为:
在这里插入图片描述
解决这个问题的⼀个好的建议就是:最好在⾃⼰的分⽀上合并下 master ,再让 master 去合并
dev ,这样做的⽬的是有冲突可以在本地分⽀解决并进⾏测试,而不影响 master 。此时的状态
在这里插入图片描述
在这里插入图片描述

删除临时分支

软件开发中,总有⽆穷⽆尽的新的功能要不断添加进来。
添加⼀个新功能时,我们肯定不希望因为⼀些实验性质的代码,把主分⽀搞乱了,所以,每添加⼀个新功能,最好新建⼀个分⽀,我们可以将其称之为feature 分⽀,在上⾯开发,完成后,合并,最后,删除该 feature 分⽀

但是如果我们今天正在某个feature分⽀上开发了⼀半,被产品经理突然叫停,说是要停⽌新功能的开发,这个feature分⽀必须就地销毁,留着⽆⽤了。这时使⽤传统的 git branch -d 命令删除分⽀的⽅法是不⾏的
因为对于没有merge操作的分支,git是不允许随便删除的使用git branch -d 就会导致报错
在这里插入图片描述

想要强行删除,就需要将-d改成 -D

git branch -D [分支名] # -D表示强行删除

在这里插入图片描述

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

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

相关文章

初识C++:从零开始掌握神秘之门的钥匙

🌱博客主页:青竹雾色间. 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 ✨人生如寄,多忧何为 ✨ 目录 一、什么是C? 二、 C的发展史 三、C的重要性 3.1 语言的使用广泛度 3.2 在工作领域 3.2.1. 操作系…

苹果Vision Pro手势+眼球融合交互的奥秘

毫无疑问,Vision Pro在眼球追踪手势的融合交互体验上,给AR/VR头戴设备带来了新突破,在用户体验上的提升非常明显。 ​那么,为什么Vision Pro上这一功能会被如此值得关注呢?为了弄清楚,我们先来看看主流VR设…

Redis进阶 - Redis哨兵

原文首更地址,阅读效果更佳! Redis进阶 - Redis哨兵 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-advance-sentinel.html 思考 slave 节点宕机恢复以后可以找 master 节点同步数据,那么 master 节点宕机怎么办&am…

OpenCV 入门教程:膨胀和腐蚀操作

OpenCV 入门教程:膨胀和腐蚀操作 导语一、膨胀操作二、腐蚀操作三、示例应用3.1 图像增强3.2 边缘检测 总结 导语 膨胀和腐蚀是图像处理中常用的形态学操作,用于改变图像的形状和结构。在 OpenCV 中,膨胀和腐蚀是基于结构元素的像素操作&…

C语言陷阱——无符号数和有符号数的大小比较

C语言易错知识点——无符号数和有符号数的大小比较 我们来看两串代码 代码一&#xff1a; #include<stdio.h>int main() {int a -1;if (a > sizeof(int)){printf(">\n");}else{printf("<\n");}return 0; }代码二&#xff1a; #include…

分布式ELK日志文件分析系统(曾经沧海难为水,除却巫山不是云)

文章目录 一、ELK 概述1. 为什么要使用 ELK2. 完整日志系统基本特征3. ELK 简介3.1 ElasticSearch&#xff08;ES&#xff09;3.2 Kiabana3.3 Logstash3.4 其它组件Filebeat缓存/消息队列Fluentd 4. ELK 的工作原理5. Linux 系统内核日志消息的优先级别 二、 部署 ELK 集群服务…

CISCN 2023 华中分区赛 awd pwn——tsh

不得不说&#xff0c;这道题出的很有水平&#xff0c;但作者水平有限&#xff0c;加上前两个小时一直在费劲逆向&#xff0c;导致最终exp就差一步。 本题源程序、libc、i64文件已上传至github。 文章目录 1. 逆向分析2. 漏洞分析——格式化字符串3. 漏洞利用——格式化字符串4…

SpringBoot 如何使用 @ControllerAdvice 注解进行全局异常处理

在 Spring Boot 应用中&#xff0c;异常处理是非常重要的一部分&#xff0c;它可以帮助我们捕获并处理应用程序中出现的异常情况&#xff0c;提高应用程序的健壮性和可靠性。在 Spring Boot 中&#xff0c;我们可以使用 ControllerAdvice 注解来实现全局异常处理。本文将介绍 C…

数据库作业2

1.显示所有职工的基本信息。 2.查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3.求出所有职工的人数。 4.列出最高工资和最低工资。 5.列出职工的平均工资和总工资。 6.创建一个只有职工号&#xff0c;姓名和参加工作的新表&#xff0c;名为工作日期表。 7.显…

使用Electron来给若依系统打包成exe程序,出现登录成功但是不跳转页面(已解决)

阿丹&#xff1a; 之前解决了css找不到文件等问题&#xff0c;那么新问题就来了&#xff01; 问题描述&#xff1a; 进入到登录页面发现问题&#xff1a; 点击登录一直在转圈&#xff0c;但是不进去&#xff01;&#xff01;&#xff01; 更诡异的是&#xff01;后台相应的很…

数据集 VOC转YOLO格式

一、xml转换为txt import os.path import xml.etree.ElementTree as ET import os import random # class_names [palm, stone, scissor, awesome, heartB, OK, ROCK, one, swear, thanks, heartA, # heartC, good, bad, pray, call, take_picture, salute] c…

机器学习——支持向量机(数学基础推导篇【未完】)

在一个周日下午&#xff0c;夏天的雨稀里哗啦地下着 我躺在床上&#xff0c;捧着ipad看支持向量机 睡了好几个觉…支持向量机太好睡了 拉格朗日乘数法太好睡了 几何函数太好睡了 在我看来&#xff0c;支持向量机是目前学下来&#xff0c;最难以理解的内容 希望日后不要太难…脑…