【Git】:分支管理
目录
理解分支
创建分支
切换分支
合并分支
删除分支
合并冲突
分支管理策略
快进合并
正常合并
bug 分支
总结
理解分支
在版本控制系统中,分支是一条独立的开发线路。它允许开发者从一个主要的代码基线(例如master
分支)分离出来,进行独立的开发工作,如开发新功能、修复漏洞等,而不会影响主分支的稳定性。
创建分支
查看本地仓库中的所有分支,当前所在的分支会在列表中以 *
符号标记出来。
git branch
创建一个新的分支
方法一:
git branch 新分支名方法二:
git checkout -b 新分支名
(创建完成分支后会自动切换过去)
方法一:
方法二:
切换分支
git checkout 切换的分支名
合并分支
将一个或多个分支的修改合并到当前分支
git merge 要合并的分支
我们来做一个简单的小实验
- 在目录下创建一个文件test ,并且输入一行内容
- 切换到 dev 分支下
- 在 dev 分支下修改 test 文件,新增一行内容,并进行一次提交操作
- 对比master分支 和 dev 分支 ,test 文件内容的区别
我们在目录下创建一个文件test ,并且输入一行内容
我们切换到 dev 分支下
在 dev 分支下修改 test ⽂件,新增一行内容,并进行一次提交操作
对比master分支 和 dev 分支 ,test 文件内容的区别
总结:在 master 分支上,内容没有添加,在 dev 分支上,内容添加了。为什么会出现这个现象呢?我们来看看 dev 分支和 master 分支指向,发现两者指向的提交是不⼀样的
看到这里就能明白了,因为我们是在dev 分支上提交的,而master 分支此刻的提交点并没有变,此时的状态如图如下:
为了在 master 主分支能看到新的提交,就需要将 dev 分支合并到 master 分支
删除分支
删除本地分支(已经合并过的分支)
git branch -d 要删除的分支名
强制删除本地分支(未合并的分支)
git branch -D 要删除的分支名
有些时候我们开发一个分支开发到一半,还没有合并,如果这个时候我们不想要了,我们想要删除分支就得强制删除本地分支
合并冲突
我们来做一个简单的小实验
- 创建⼀个新的分支 dev ,并切换至dev 分支
- 在 dev 分支 下修改 test ⽂件,更改文件内容,并提交
- 切换到 master 分支 ,观察 test 文件内容,对 test 文件再进行一次修改,并提交
- master 分支 和 dev分支 进行合并
创建⼀个新的分支 dev ,并切换至dev 分支
在 dev 分支下修改 test ⽂件,更改文件内容,并提交
切换到 master 分支,观察 test 文件内容,对 test 文件再进行一次修改,并提交
master 分支 和 dev分支 进行合并,这种情况下,Git 只能试图把各自的修改合并起来,但这种合并就可能会有冲突
此时我们必须要手动调整冲突代码,并需要再次提交修正后的结果!!
到这里冲突就解决完成,此时的状态变成了
分支管理策略
查看提交历史的命令,类图形化查看提交历史
git log --graph --pretty=oneline --abbrev-commit
我们有两种分支合并的方法,我们应该如何去选择呢?
- 快进合并(Fast - forward Merge)
- 正常合并(Three - way Merge)
快进合并
适用场景和条件:这种合并适用于源分支是目标分支的直接后继,并且源分支上的所有提交都是在目标分支最新提交的基础上线性进行的情况。例如,从master
分支创建new - feature
分支后,master
分支没有新的修改,而new - feature
分支进行了一系列的提交。
正常合并
适用场景和条件:当目标分支和源分支有独立的提交历史,即从它们的共同祖先之后有各自的修改时,需要进行正常合并。例如,master
分支和feature - branch
都有从共同祖先之后的新提交。
我们可以强制禁用 快进合并 模式,那么就会在 merge 时⽣成⼀个新的 commit ,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "提交文件的描述" 合并的分支名
不使用 快进合并模式,合并后就像这样 :
- master 分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活
- 干活都在dev 分支上,也就是说,dev 分支是不稳定的,到某个时候,⽐如1.0版本发布时,再把dev 分支合并到 master 分支上,在master 分支发布1.0版本
- 我们每个人都在dev 分支上干活,每个人都有自己的分支,时不时地往dev 分支上合并就可以了。
bug 分支
- 假如我们现在正在 dev2 分支上进行开发,开发到⼀半,突然发现 master 分支之上面有 bug,需要解决
- 每个 bug 都可以通过⼀个新的临时分支来修复,修复后,合并分支,然后将临时分支删除
- 可现在 dev2 的代码在工作区中开发了⼀半,还无法提交,怎么办?
暂时保存当前工作目录的修改,这些修改可以是未提交的文件修改、新添加的文件或者暂存区(stage area)中的修改。它允许你在不提交当前工作的情况下切换分支或者处理其他紧急任务,之后再回来恢复这些修改继续工作。
git stash
查看所有已保存的stash
(暂存)记录的列表。当你使用git stash
命令保存工作目录和暂存区的修改时,这些修改会被存储在一个栈结构中,git stash list
命令就是用来查看这个栈中所有记录的详细信息的。
git stash list
用于恢复并删除git stash
栈顶(最新保存)的修改记录的命令。它结合了git stash apply
(应用暂存的修改)和git stash drop
(删除暂存的修改)的功能。
git stash pop // apply + dropgit stash apply // 恢复工作区的内容
git stash drop // 删除暂存的修改
但我们注意到了,修复 bug 的内容,并没有在 dev2 上显示。此时的状态图为:
- master 分支目前最新的提交,是要领先于新建 dev2 时基于的 master 分支的提交的,所以我们在 dev2 中当然看不见修复 bug 的相关代码
- 我们的最终目的是要让 master 合并 dev2 分支的,那么正常情况下我们切回 master 分支直接合并即可,但这样其实是有⼀定风险的
- 是因为在合并分支时可能会有冲突,而代码冲突需要我们手动解决(在 master 上解决)。
- 我们无法保证对于冲突问题可以正确地⼀次性解决掉,因为在实际的项目中,代码冲突不只⼀两行那么简单, 有可能几十上百行,甚至更多,解决的过程中难免手误出错,导致错误的代码被合并到 master 上。
解决这个问题的⼀个好的建议就是:最好在自己的分支上合并下 master ,再让 master 去合并dev2 ,这样做的目的是有冲突可以在本地分支解决并进行测试,而不影响 master 。
此时的状态为:
总结
- 假设你准备开发⼀个新功能,但是需要两周才能完成,第⼀周你写了50% 的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再⼀次提交,又存在丢失每天进度的巨大风险。
- 现在有了分支,就不用怕了。你创建了⼀个属于你自己的分支,别人看不到,还继续在原来的分支上正常⼯作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
- 并且 Git 无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。
相关文章:
【Git】:分支管理
目录 理解分支 创建分支 切换分支 合并分支 删除分支 合并冲突 分支管理策略 快进合并 正常合并 bug 分支 总结 理解分支 在版本控制系统中,分支是一条独立的开发线路。它允许开发者从一个主要的代码基线(例如master分支)分离出来…...
C、C++ 和 Java的区别
C、C 和 Java 是三种广泛使用的编程语言,它们各有特点,适合不同的应用场景。以下从多个角度对它们的区别进行分析: 基础特性 特性CCJava语言类型过程式编程语言过程式 面向对象编程语言纯面向对象编程语言(也支持过程式&#x…...
【Python-Open3D学习笔记】005Mesh相关方法
TriangleMesh相关方法 文章目录 TriangleMesh相关方法1. 查看mesh三角形面信息2. 可视化三角形3. 上采样4. 计算mesh形成的面积和体积 1. 查看mesh三角形面信息 def view_hull_triangles(hull: o3d.geometry.TriangleMesh):"""查看mesh三角形面信息(…...
js原型、原型链和继承
文章目录 一、原型1、prototype2、constructor 二、原型链1、字面量原型链2、字面量继承3、构造函数的原型链4、Object.create5、Object.setPrototypeOf 三、继承1、构造函数继承2、原型链继承3、组合继承 四、常见链条1、Function2、Object.prototype 继承是指将特性从父代传递…...
团队自创【国王的魔镜-2】
国王的魔镜-2 题目描述 国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的。比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话&am…...
c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享
在嵌入式系统中,有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器,通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片,驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实…...
【Jenkins】docker 部署 Jenkins 踩坑笔记
文章目录 1. docker pull 超时2. 初始化找不到 initialAdminPassword 1. docker pull 超时 docker pull 命令拉不下来 docker pull jenkins/jenkins:lts-jdk17 Error response from daemon: Get "https://registry-1.docker.io/v2/": 编辑docker配置 sudo mkdir -…...
Unreal Engine使用Groom 打包后报错
Unreal Engine使用Groom打包后报错 版本5.4.4 blender 4.2.1 项目头发用了groom,运行后报错 错误: Assertion failed: Offset BytesToRead < UncompressedFileSize && Offset > 0 [File:E:\UnrealEngine-5.4.4-release\Engine\Source\R…...
嵌入式QT学习第3天:UI设计器的简单使用
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 Qt Creator 里自带的 Qt Designer,使用 Qt Designer 比较方便的构造 UI 界 面。 在 UI 文件添加一个按钮 左边找到 Push Button,然后拖拽到中…...
【连接池】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...
图论入门编程
卡码网刷题链接:98. 所有可达路径 一、题目简述 二、编程demo 方法①邻接矩阵 from collections import defaultdict #简历邻接矩阵 def build_graph(): n, m map(int,input().split()) graph [[0 for _ in range(n1)] for _ in range(n1)]for _ in range(m): …...
在Java中使用Apache POI导入导出Excel(三)
本文将继续介绍POI的使用,上接在Java中使用Apache POI导入导出Excel(二) 使用Apache POI组件操作Excel(三) 24、拆分和冻结窗格 您可以创建两种类型的窗格;冻结窗格和拆分窗格。 冻结窗格按列和行进行拆分。您创建…...
UR开始打中国牌,重磅发布国产化协作机器人UR7e 和 UR12e
近日,优傲(UR)机器人公司立足中国市场需求,重磅推出UR7e和UR12e 两款本地化协作机器人。它们延续优傲(UR)一以贯之的高品质与性能特质,着重优化负载自重比,且在价格层面具竞争力&…...
FRU文件
FRU(Field Replaceable Unit)源文件的格式通常遵循IPMI FRU Information Storage Definition标准。在实际应用中,FRU源文件可以是JSON格式的,这种格式允许用户指定所有的FRU信息字段。以下是FRU源文件的JSON格式的一些关键点&…...
AI需求条目化全面升级!支持多格式需求,打破模板限制!
AI需求条目化全面升级!支持多格式需求,打破模板限制! 一、多格兼济 标准立成 1、功能揭秘 预览未来 平台需求板块的AI需求条目化功能迎来全面升级。它支持多种需求格式,不再受限于模板文件,能够一键自动快速且灵活地生…...
Java—I/O流
Java的I/O流(输入/输出流)是用于在程序和外部资源(如文件、网络连接等)之间进行数据交换的机制。通过I/O流,可以实现从外部资源读取数据(输入流)或将数据写入外部资源(输出流&#x…...
Huginn服务部署
工作中需要使用爬虫系统,做为技术选型需要对Huginn系统进行部署并进行功能验证。下面的文章会记录了Huginn的部署过程,本次部署采用的Ubuntu-23.0.4系统,使用Docker部署。部署过程需要翻墙。 一、安装Docker 删除旧版本 sudo apt-get remo…...
深入解析Java数据包装类型:特性、机制与最佳实践
文章目录 1. 基本概念2. 自动装箱与拆箱3. 缓存机制4. 不可变性5. 常见陷阱与最佳实践a. 空指针异常b. 不要用 比较两个包装类实例c. 高精度计算d. 字符串解析 总结 1. 基本概念 Java提供了每个基本数据类型的包装类,位于java.lang包中。这些包装类允许我们将基本…...
【Java基础入门篇】二、控制语句和递归算法
Java基础入门篇 二、控制语句和递归算法 2.1 switch-case多分支选择语句 switch执行case语句块时,若没有遇到break,则运行下一个case直到遇到break,最后的default表示当没有case与之匹配时,默认执行的内容,代码示例如…...
PostgreSQL WAL日志膨胀处理
作者:Digital Observer(施嘉伟) Oracle ACE Pro: Database PostgreSQL ACE Partner 11年数据库行业经验,现主要从事数据库服务工作 拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、P…...
用户该怎么管理维护自己的服务器?
管理和维护自己的服务器是确保其长期稳定、高效和安全运行的重要任务。以下是一些关键的服务器管理和维护的步骤和建议,适用于Linux或Windows服务器。 1.定期备份数据 定期备份是防止数据丢失和恢复故障的关键步骤。备份策略应包括: 全量备份:…...
【MYSQL数据库相关知识介绍】
MySQL 在我们日常技术中是一个广泛使用的开源关系型数据库管理系统,所以作为测试同学,掌握mysql的相关知识是必不可少的技能之一,所以小编从软件测试的角色出发,来整理一些跟测试相关的知识,希望能够帮助到大家。 一、…...
初窥 HTTP 缓存
引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…...
yolov8的深度学习环境安装(cuda12.4、ubuntu22.04)
目录 一、先安装基础环境包 1.首先给Ubuntu安装Chrome浏览器(搜索引擎换成百度即可) 2、ubuntu 22.04中文输入法安装 3、安装 terminator 4、安装WPS for Linux 5、安装其它之前需要先安装anaconda 6、安装配置anaconda 7、安装完成anaconda后创建…...
RSA算法和AES算法,哪种更安全
目录 一、RSA (非对称加密算法) 二、AES (对称加密算法) 三、对比总结 四、更安全的选择 五、结合使用:RSA AES RSA 和 AES 是两种不同类型的加密算法,适用于不同的场景,因此它们的安全性不能直接比较,而是取决于具体的应用…...
Vue教程|搭建vue项目|Vue-CLI新版脚手架
一、安装Node环境 安装Node及Npm环境 Node下载地址:Node.js — Run JavaScript EverywhereNode.js is a JavaScript runtime built on Chromes V8 JavaScript engine.https://nodejs.org/en/ 安装完成后,检查安装是否成功,并检查版本,命令如下: node -v npm -v mac@Macd…...
kdump调试分析(适用于麒麟,ubuntu等OS)
1. kdump基本原理 1.1 内核崩溃处理机制 当 Linux 系统内核发生崩溃时,通常会触发 panic,系统停止正常运行。Kdump 在这种情况下: 使用一个备用的内核(称为 crash kernel)来启动最小化的环境。从崩溃的主内核中复制内存内容(转储文件)。将转储文件保存到预定义的存储位…...
houdini肌肉刷pin点的方法
目标:产生gluetoanimation这个属性 主要节点:attribute paint(或者muscle paint) 步骤1: 导入肌肉资产 导入的是rest shape的肌肉 在有侧边栏可以打开display group and attribute list,方便查看group。不同的肌肉块按照muscl…...
JMeter 并发策略-针对准点秒杀场景的压测实现
一、场景的压测实现 1,创建线程组,10并发用户执行5次; 2,创建 Synchronizing Timer 元件,用于同步线程,设置同步元件 Synchronizing Timer 3,创建 http 请求4,创建 view results in table 元件…...
龙迅#LT6912适用于HDMI2.0转HDMI+LVDS/MIPI,分辨率高达4K60HZ,支持音频和HDCP2.2
1. 描述 LT6912是一款高性能的HDMI2.0转HDMI和LVDS和MIPI转换器。 HDMI2.0 输入和输出均支持高达 6Gbps 的数据速率,为4k60Hz视频提供足够的带宽。此外,还支持 HDCP2.2 进行数据解密(无数据 加密)。 对于 LVDS 输出,…...
如何做企业网站后台管理/网络推广引流
1. 迁移背景介绍目前我们的图数据库数据量为 顶点 20 亿,边 200 亿的规模。在迁移之前我们使用的 AgensGraph 数据库一个主库四个备库,机器的配置都比较高,256G 内存 SSD 的磁盘,单机数据量为 3T左右。在数据量比较小的情况下 Age…...
政府网站建设工作 主要职责/郑州网络营销公司
对于Vue.js来说,如果你想要快速开始,那么只需要在你的html中引入一个<script>标签,加上CDN的地址即可。但是,这并不算是一个完整的vue实际应用。在实际应用中,我们必须要一系列的工具,包括࿱…...
如何作wordpress 主题/网站排名怎么搜索靠前
在不同环境部署项目时,由于不同的配置,部署时难免会改变部署的方式,而且基本使用版本管理工具,比如git或svn进行下拉代码部署项目时,尽可能的不变动代码(如果变动代码,下次下拉代码前必须要使用…...
企业网站备案怎么做/百度入口网址
去除重复字母 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 注意:该题与 1081 https://leetcode-cn.com/problems/smalle…...
企业网站建设需要哪些费用/推广点击器
在上篇文章写到我们为什么要分层.有很多读者提出来很多宝贵的意见.让我受益匪浅,深深的感觉到自己的水平"还有很大的提升空间".首先感谢这些朋友们,我会进一步总结完善自己的想法. 截取了部分朋友的留言,感谢他们: 这次我用对比的方式描述一下,分层到底分出了什么.俗…...
wordpress 调用页面/北京厦门网站优化
题目描述 约翰家的 N 头奶牛正在排队游行抗议。一些奶牛情绪激动,约翰测算下来,排在第 i 位的奶牛的理智度为 A i ,数字可正可负。约翰希望奶牛在抗议时保持理性,为此,他打算将这条队伍分割成几个小组,每个…...