git之分支管理

一.理解分支

我们看下面这张图片:

在版本回退⾥,你已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即master分⽀

HEAD严格来说不是指向提交,⽽是指向master,master才是指向提交的,所以,HEAD指向的就是当前分⽀
 

二.创建分⽀

这里我们又要开始指令的学习了。

git branch 查看当前本地所有分⽀

如图:

git branch +name;//表示创建分支

我们这里就先创建dev1分支

注意:*表示为当前HEAD指向的分支

如图,我们可以发现master和dev1的指向相同,如图所示:

三.切换分⽀

git checkout +分支名;

下面我们切换到dev1分支:

*号在dev1上了,我们切换成功。

如图:

下面我们在dev1分支上新写一行内容,然后提交:

我们返回master分支,cat test文件:

发现没有新加的内容,如下图:

四.合并分⽀

为了在master主分⽀上能看到新的提交,就需要将 dev1 分⽀合并到 master 分⽀,操作如下:


 

我们用:

git merge +分支名//表示将分支合并到当前HEAD所在分支上

补充:

Fast-forward代表“快进模式”,也就是直接把master指向dev1的当前提交,所以合并速度⾮常快
 

五.删除分⽀

合并完成后,dev1分⽀对于我们来说就没⽤了,那么dev1分⽀就可以被删除掉

注意点:

1.如果当前正处于某分⽀下,就不能删除当前分⽀

2.如果该分支未进行过合并,不能用该指令删除
 

git branch -d +分支名;删除某分支

操作如下:

六.合并冲突

在实际分⽀合并的时候,并不是想合并就能合并成功的,有时候可能会遇到代码冲突的问题
补充知识;

git checkout -b +分支名;
//表示git branch +分支名 +git checkout +分支名

为了演示该操作,我们新建dev2分支,然后再dev2分支第一行后面+aaa,在master分支test文件第一行+bbb:

新建dev2分支,然后再dev2分支第一行后面+aaa:

在master分支test文件第一行+bbb:

现在情况如下图:

如果我们现在在master分支上合并:

就会出现以下错误

打开test文件,进行适当人为修改:

假如我们是要aaa,修改结果如下:

修改完成之后,我们需要再次提交即可,操作如下:

补充知识:

git log:
git log --graph --abbrev-commit;//表示视图查看修改情况

七.分⽀管理策略

通常合并分⽀时,如果可能,Git会采⽤ Fast forward 模式。还记得如果我们采⽤ Fast forward 模式之后,形成的合并结果是什么呢?

在Fast forward 模式下,删除分⽀后,查看分⽀历史时,会丢掉分⽀信息,看不出来最新提
交到底是merge进来的还是正常提交的。
但在合并冲突部分,我们也看到通过解决冲突问题,会再进⾏⼀次新的提交,该好处是,从分⽀历史上就可以看出分⽀信息。例如我们现在已经删除了在合并冲突部分创建的 dev2 分⽀,但依旧能看到master其实是由其他分⽀合并得到

 

Git⽀持我们强制禁⽤ Fast forward 模式,那么就会在merge时⽣成⼀个新的 commit ,这样,
从分⽀历史上就可以看出分⽀信息
指令:(举例)

git merge --no-ff -m "merge with no-ff" dev2

--no-ff 参数,表⽰禁⽤ Fast forward 模式。禁⽤ Fast forward 模式后合并会创建⼀个新的 commit ,所以加上 -m 参数,把描述写进去
 

所以在合并分⽀时,加上 --no-ff 参数就可以⽤普通模式合并,合并后的历史有分⽀,能看出来曾
经做过合并,⽽ fast forward 合并就看不出来曾经做过合并

 

八.分⽀策略

在实际开发中,我们应该按照⼏个基本原则进⾏分⽀管理:
1.master分⽀应该是⾮常稳定的,也就是仅⽤来发布新版本,平时不能在上⾯⼲活

2.dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布时,再把dev分⽀合并到master上,在master分⽀发布1.0版本
 

九.bug分⽀

假如我们现在正在dev3分⽀上进⾏开发,开发到⼀半,突然发现 master 分⽀上⾯有bug,需要
解决。在Git中,每个bug都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀删除。
可现在 dev3的代码在⼯作区中开发了⼀半,还⽆法提交,怎么办?

 

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

现在我们发现master分支存在问题,接下来我们要进行如下操作;

第一步:保存当前内容(注意:内容是在工作区未git add的)

第二步:回到master分支,然后新建修改分支,进行修改

第三步:将修改版本合并到master版本

第四步:回到dev3得到之前内容,继续工作

git stash list;
//查看stash中内容
git stash pop;
//恢复工作区
git stash apply stash@{0};
//恢复指定的stash
git stash apply;
//恢复工作区,但是stash中还有内容
git stash drop
//来删除stash中内容

第五步:dev3完成之后先将master合并到dev3上,在将dev3合并到master上(重点)

十.删除临时分⽀

指的是删除分支中的注意点2:该分支未进行过合并,不能用git branch -d删除

我们此时可以用-D强制删除

git branch -D +分支名

分支作用总结:

分⽀在实际中有什么⽤呢?假设你准备开发⼀个新功能,但是需要两周才能完成,第⼀周你写了50%的代码,如果⽴刻提交,由于代码还没写完,不完整的代码库会导致别⼈不能⼲活了。如果等代码全部写完再⼀次提交,⼜存在丢失每天进度的巨⼤⻛险。现在有了分⽀,就不⽤怕了。你创建了⼀个属于你⾃⼰的分⽀,别⼈看不到,还继续在原来的分⽀上正常⼯作,⽽你在⾃⼰的分⽀上⼲活,想提交就提交,直到开发完毕后,再⼀次性合并到原来的分⽀上,这样,既安全,⼜不影响别⼈⼯作。并且Git⽆论创建、切换和删除分⽀,Git在1秒钟之内就能完成!⽆论你的版本库是1个⽂件还是1万个⽂件
 

追后,感谢大家的支持 !!!

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

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

相关文章

javaScript打印n以内的素数——试除法及优化

素数:只能被1和它本身整除 试除法 试除法的时间复杂度为O(n*sqrt(n)),空间复杂度为O(1),这已经是一种比较高效的解决方案了。 n如果不是质数,那么能整除的数一定与根号n。基于此缩小循环比较范围,并且一旦找到可以整除…

数字签名在游戏里的应用

数字签名是一种电子形式的签名,用于验证数字文档、消息或交易的真实性和完整性。它是基于公钥加密技术,通过使用发送者的私钥来签名文档,然后使用发送者的公钥验证签名的正确性。数字签名不仅能证明信息没有被篡改,也能证明信息的发送者是真实的,因此在很多安全敏感的应用…

2024年 前端JavaScript入门到精通 第四天 笔记

4.1 函数的基本使用以及封装练习 ★ 函数命名规范 4.2 函数的参数以及默认参数 函数的灵魂!!! 4.3 函数封装数组求和案例 4.4 函数返回值return 4.5 函数返回值细节以及上午总结 4.6 函数返回值案例-求最大值和最 4.7 函数复习以及断点进入函…

如何在Linux搭建MinIO服务并实现无公网ip远程访问内网管理界面

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器,可以在各种环境中运行,例如本地、Docker容器、Kubernetes集群等。它兼…

挑战杯 基于机器视觉的12306验证码识别

文章目录 0 简介1 数据收集2 识别过程3 网络构建4 数据读取5 模型训练6 加入Dropout层7 数据增强8 迁移学习9 结果9 最后 0 简介 🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉的12306验证码识别 该项目较为新颖,适合作为竞赛课题方向…

springboot创建一个简单的web项目

要创建一个简单的Spring Boot Web项目,您可以按照以下步骤进行操作: 首先,您需要安装Java开发环境。确保您已经安装了JDK(Java Development Kit),并且已经配置了JAVA_HOME环境变量。 接下来,您…

Inno setup 打包jar包+前端dist+mysql+navicat等应用文件操作

目录 一、 使用exe4j将后端jar包打包成exe应用文件 1.创建一个新的工程 2.选择一个你想要存放的路径 3.进入配置界面 4.选择jar转换exe模式 5.自定义名字和选择输出路径 6.配置初始化 7.配置java环境 8.测试运行结果 二、Inno 打包应用文件exe 1.新建一个工程文件 2…

main函数中argc和argv是什么意思

在C和C中,int main(int argc, char* argv[])语句作为程序的入口,在main函数中常常用到。 argc:argument count,参数的数量。argc是一个整型数,代表传入程序的命令行参数的数量。程序名称是第一个参数,所以…

【hashmap】【将排序之后的字符串作为哈希表的键】【获取 HashMap 中所有值的集合】Leetcode 49 字母异位词分组

【hashmap】【将排序之后的字符串作为哈希表的键】【获取 HashMap 中所有值的集合】Leetcode 49 字母异位词分组 解法1 将排序之后的字符串作为哈希表的键解法2 在解法一的基础上加入了getOrDefault ---------------🎈🎈题目链接🎈&#x1f3…

获取用户信息与token理解

获取用户信息和token是在开发Web应用程序时常见的需求,可以通过以下步骤来实现: 用户登录:用户在应用程序中输入用户名和密码进行登录验证。一旦验证成功,应用程序会生成一个唯一的token,并将其返回给客户端。存储tok…

Nginx http.server.location配置项说明

在 nginx.conf 的 server 块中的 location / { } 部分,你可以配置许多不同的参数来控制如何处理进入的请求和响应。以下是一些常用的 location 块配置参数: proxy_pass: 用于将请求代理到另一个服务器。例如:proxy_pass http://backend_server; proxy_set_header: 用于设置传…

核函数概念

基本概念 核函数是在机器学习领域,尤其是在支持向量机(SVM)算法中常用到的一个概念。核函数的基本想法是通过一个非线性变换将原始数据映射到一个更高维的空间,在这个新的空间中,原本线性不可分的数据可能变得线性可分…

从零开始手写mmo游戏从框架到爆炸(二十二)— 战斗系统三

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 目录 地图设定 战斗引擎 服务端的BattleHandler 客户端的相关handler 战斗场景展示 执行效果 文接上一章。我们把战斗系统demo应用到实际的项目中来。在第十九章&#xf…

AI对话系统app开源

支持对接gpt,阿里云,腾讯云 具体看截图 后端环境:PHP7.4MySQL5.6 软件:uniapp 废话不多说直接上抗揍云链接: https://mny.lanzout.com/iKFRY1o1zusf 部署教程请看源码内的【使用教程】文档 欢迎各位转载该帖/源码

智慧公厕是什么?智慧公厕意义何在

随着城市化进程的加速,公厕成为城市管理中不容忽视的一环。智慧公厕传统的公厕管理方式已经无法满足当今社会的需求,因此智慧公厕的出现成为解决问题的利器。什么是智慧公厕?智慧公厕是实现公共厕所信息化、数字化、智慧化全方位管理与服务的…

啤酒:精酿啤酒与烧烤的热烈碰撞

在夏日的傍晚,烧烤与啤酒总是绝配。当Fendi Club啤酒遇上烧烤,它们将为我们带来一场热烈的美味碰撞。 Fendi Club啤酒,以其醇厚的口感和淡淡的麦芽香气而著称。这款啤酒在酿造过程中采用了特别的工艺,使得酒体呈现出诱人的金黄色&…

F2图例封装 - Bar

基于vue3 和 F2 3.5.0 <template><div :style"{minHeight: ${height}px,width: 100% }" ref"container"><canvas v-show"showChart" :id"chartId" class"chart-canval"></canvas><empty-box v-…

零感佩戴的开放式耳机,音质悦耳更耐听,西圣Air体验

每天都用蓝牙耳机的朋友应该不少&#xff0c;我平时也经常戴&#xff0c;不过最近我用的不是常规的入耳式耳机&#xff0c;因为它佩戴不舒适&#xff0c;戴久了耳朵特别难受。所以现在我换上了开放式耳机&#xff0c;这种耳机叫做OWS&#xff0c;我的这款是西圣Air&#xff0c;…

查看mysql数据库的版本

要查看MySQL数据库的版本&#xff0c;可以使用以下几种方法&#xff1a; 命令行&#xff08;已连接到MySQL服务器&#xff09;&#xff1a; 登录到MySQL服务器后&#xff0c;在MySQL提示符下执行&#xff1a; mysql> SELECT VERSION(); 或者&#xff0c;也可以执行 STATUS; …

Zynq(音标可以是zɪŋk)中的PS和PL

在 Zynq 架构下&#xff0c;"PS" 和 "PL" 分别指代 SoC&#xff08;System on Chip&#xff09;中的两个主要部分。 PS&#xff08;Processing System&#xff09;&#xff1a;它是 Zynq SoC 中的处理系统部分&#xff0c;包括 ARM Cortex-A 系列处理器核…