【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分支)分离出来…...
Java中的运算符“instanceof“详解
在Java中,instanceof运算符用于检查一个对象是否是某个特定类的实例,或者是否实现了某个特定接口。它返回一个布尔值(true或false),用于在运行时进行类型检查。这在处理多态性时尤其有用,可以帮助我们确定对…...
Profinet转Modbus TCP西门子SINAMICS G120变频器与施耐德M580通讯案例
一. 案例背景 在复杂的工业自动化场景中,企业常常会采用不同品牌的设备来构建生产系统。西门子SINAMICS G120变频器以其高性能、高精度的速度和转矩控制功能,在电机驱动领域应用广泛。施耐德M580可编程逻辑控制器则以强大的逻辑控制和数据处理能力著称&a…...
机器学习实战笔记39-43树模型基础
目前最常用的是CART树: 评价标准:每次划分后子节点的纯度(即是否标签都为0/1),分为信息熵、基尼系数(越小则纯度越高)和分类误差 找划分节点的方法:CART树无需区分连续和离散变量&am…...
`uni.setClipboardData` 是 uni-app 提供的一个 API 设置系统剪贴板的内容
uni.setClipboardData是uni-app提供的一个API,用于设置系统剪贴板的内容。 使用说明: 使用此API可以将指定的文本内容复制到系统剪贴板,使用户能够在其他应用或页面中粘贴这些内容。 uni.setClipboardData({data: , // 需要复制的内容 suc…...
Android opengl 绘制矩形,宽高相同,不能显示为正方形,是怎么回事
在Android上使用OpenGL绘制矩形(或尝试显示为正方形)时,如果结果显示为不是正方形,可能有几个原因。以下是一些常见的因素及解决方法: 视口(Viewport)设置不当: OpenGL的视口定义了…...
网络安全开源组件
本文只是针对开源项目进行收集,如果后期在工作中碰到其他开源项目将进行更新。欢迎大家在评论区留言,您在工作碰到的开源项目。 祝您工作顺利,鹏程万里! 一、FW(防火墙) 1.1 pfSense pfSense项目是一个免费…...
【C++初阶】第5课—模版初阶
文章目录 1. 函数模版1.1 函数模版格式1.2 函数模版原理1.3 函数模版的实例化1.4 模版参数的匹配原则 2. 类模版 1. 函数模版 在讲函数模版之前先看一个例子 为了实现泛型编程,C提出了函数模版的概念函数模版与类型无关,在使用时被参数化,根据…...
【力扣热题100】[Java版] 刷题笔记-3. 无重复字符的最长子串
题目:3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 解题思路 根据题目,只需要返回无重复字符串的最长子串的长度,所以我们不需要知道知道字符串内容是什么,在整个字符串 s 中&…...
无人机数据处理系统:原理与核心系统
一、数据处理系统的运行原理 数据获取:无人机在飞行过程中,通过搭载的传感器(如相机、激光雷达等)采集到各种类型的数据,例如图像、点云等。这些数据是后续处理和分析的基础。 数据传输:采集到的数据会通…...
Hadoop分布式文件系统(二)
目录 1. 引言1. Hadoop文件操作命令2. 部分常用的Hadoop FS Shell命令2.1 ls列出文件2.2 mkdir创建目录2.3 put上传文件2.4 cat查看文件2.5 get复制文件2.6 rm删除文件 3. Hadoop系统管理命令4. HDFS Java API 示例参考 1. 引言 大多数HDFS Shell命令的行为和对应的Unix Shell命…...
PortSwigger 原型污染
一、什么是原型污染 原型污染是一种 JavaScript 漏洞,它使攻击者能够向全局对象原型添加任意属性,然后这些属性可能被用户定义的对象继承。 二、JavaScript 原型和继承基础 1、原型 JavaScript 中的每个对象都链接到某种类型的另一个对象,称…...
雪花算法详解:分布式系统中高效唯一的ID生成方案
文章目录 原理与结构工作流程优势局限性应对高并发的方法适用场景 雪花算法(Snowflake Algorithm)是由Twitter开发的一种分布式全局唯一ID生成方案,旨在解决在分布式系统中快速、无冲突地生成唯一标识符的问题。它通过巧妙的设计,…...
[Redis#7] set | 命令 | 集合 | 用户画像 | UV
目录 1. 特点 2. 常用命令 2.1 普通命令 2.2 集合间操作 2.3. 命令小结 3.内部编码 4. 应用场景 1. 构造用户画像 2. 计算用户之间的共同好友 3. 统计 UV 1. 特点 集合类型也是保存多个字符串类型的元素的,和 list 类型不同的是: 无序性&…...
中介者模式 (Mediator Pattern)
文章目录 中介者模式 (Mediator Pattern)原理优点缺点示例代码场景描述1. 定义中介者接口2. 实现具体中介者3. 定义同事类接口4. 实现具体同事类5. 客户端代码输出结果 UML 类图使用场景小结 中介者模式 (Mediator Pattern) 中介者模式是一种 行为型设计模式,用来降…...
PVE 软路由单网口——VLAN 实践
从VLAN交换机出发,到PVE的Linux Bridge 、Linux VLAN,再到iKuai等软路由软件的设置,尽可能的了解VLAN设置细节,避免踩坑。 本文使用的快速切换CIDR的脚本 PVE 调试之“一键设置网络连接的以太网的CIDR“——“.PS1 脚本” 默认…...
搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档
搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档 本项目采用以下架构: NFS服务器: 负责存储文档资料。Web服务器: 负责提供文档访问和编辑功能。SELinux: 负责权限控制,确保文档安全。Git服务器: 负责存储文档版本历史&#x…...
【QT】控件8
1.QDial 通过调节旋钮位置来控制窗口的不透明度: void Widget::on_dial_valueChanged(int value) {qDebug()<<value;this->setWindowOpacity((double)value/100); }效果演示: 2.Date/Time Edit 计算两个日期的差值 ui界面设计 计算按钮按下…...
asyncio.to_thread 详解及示例代码
asyncio.to_thread 详解及示例代码 1. asyncio.to_thread() 简介函数签名返回值 2. 示例代码示例 1: 执行阻塞的 I/O 操作示例 2: 执行阻塞的 CPU 密集型操作 3. 注意事项4. 总结 在异步编程中,asyncio 是 Python 中用于编写异步代码的标准库。然而,有时…...
MYSQL字段变更
修改字段长度 ALTER TABLE tqt_sp_prod.t_receipt_order_head MODIFY COLUMN CUS_CONTRACT_CD VARCHAR(50) COMMENT 客户合同编号;添加varchar类型字段 AFTER 此处指在loc_cd字段后面 ALTER TABLE m_product ADD COLUMN FIXED_ASSET_NUM VARCHAR(100) DEFAULT NULL COMME…...
【通俗理解】步长和学习率在神经网络中是一回事吗?
【通俗理解】步长和学习率在神经网络中是一回事吗? 【核心结论】 步长(Step Size)和学习率(Learning Rate, LR)在神经网络中并不是同一个概念,但它们都关乎模型训练过程中的参数更新。 【通俗解释&#x…...
力扣-位运算-8【算法学习day.48】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
C++ 字符串中数字识别
【问题描述】 输入一个字符串,含有数字和非数字字符,如“sumabc234;while(abc700)tab{ass346;bssabc267;}”,将其中连续的数字作为一个整数,依次存放到一个数组nums中。例如,234放在nums[0],700放在nums[1…...
计算机毕业设计Python+卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
jvm-49-linux 服务器 cpu 使用率升高应该如何排查分析?
拓展阅读 JVM FULL GC 生产问题 I-多线程通用实现 JVM FULL GC 生产问题 II-如何定位内存泄露? 线程通用实现 JVM FULL GC 生产问题 III-多线程执行队列的封装实现,进一步抽象 jvisualvm java 性能分析工具 jvm-44-jvm 内存性能分析工具 Eclipse Me…...
FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现
FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现 原因ADS111x连续采样实现连续采样功能说明iic读取adc的数据速率 VS adc连续采样的速率adc连续采样的速率iic读取adc的数据速率结论分析 FPGA读取adc数据问题一:读取adc数…...
Web开发基础学习——HTML, CSS, JavaScript 的区别和联系
Web开发基础学习系列文章目录 第一章 基础知识学习之HTML, CSS, JavaScript 的区别和联系 文章目录 Web开发基础学习系列文章目录前言一、定义说白了,就是HTML负责网页的内容,CSS负责网页的格式,JS负责网页的交互。 二、 功能三、联系四、示…...
通义灵码走进北京大学创新课堂丨阿里云云原生 10 月产品月报
云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 趋势热点 🥇 通义灵码走进北京大学创新课堂,与 400…...
Facebook Messenger背后的技术架构:即时通讯的实现之道
Facebook Messenger,作为全球最受欢迎的即时通讯应用之一,每天承载着数十亿的消息交换。其背后支撑这一流畅通讯体验的技术架构,融合了大量先进的技术和创新的解决方案。本文将从技术角度,深入探讨Facebook Messenger如何实现即时…...
前端css实例
前端css实例 一、带条纹的表格 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>条纹样式的表格<…...
电阻改善信号完整性
1.为什么电路端接电阻能改善信号完整性 由于电信号在PCB上传输,因此在PCB设计中可以把PCB走线认为是信号的通道,当该通道的 物理结构(线宽,线到参考面的距离等)发生变化,特别是有一些突变时,都会…...
如何选择合适的主键id?
目录标题 MySQL主键一定是自增的吗?自增id、uuid、雪花算法 谁更合适?详细聊聊 UUID详细聊聊 雪花算法 在数据库设计中,选择合适的主键对于数据表的性能和数据完整性都非常重要。接下来,让我们探讨一下自增id、uuid和雪花算法&…...
OpenMP出现Stack Overflow及其疑问
今天对着《OpenMP核心技术指南》练习OpenMP,其中一个案例: #include <stdio.h> #include <math.h> #include <omp.h>#define ITER 100000000void main() {int i;double A[ITER];for (i 0; i < ITER; i)A[i] 2.0 * i;#pragma omp parallel{/…...
vscode查找函数调用
在 VS Code 中,要查找 C 语言函数的调用列表,有以下几种方法可以使用,具体取决于项目的规模和你的需求: 方法 1: 使用全局查找功能 步骤: 打开全局查找: 按 CtrlShiftF (Windows/Linux) 或 CmdShiftF (Ma…...
网络安全-网络安全审计
网络安全审计是为了确保网络系统的安全性和完整性,防范潜在的网络攻击和数据泄露风险。 审计步骤: 1.确定审计目标:明确审计的目的和范围,例如审计网络设备、服务器、应用程序或数据库等。 2.收集信息:收集审计范围…...
刷LeetCode hot100--1.哈希表
哈希表--查找一个元素在不在数组/map/set中 目前用到的数据结构: std::unordered_set哈希表无序否否O(1)O(1) std::unordered_map哈希表key无序key不可重复key不可修改O(1)O(1) 1. 两数之和 - 力扣(LeetCode) 30min 几个问题 1.原来想…...
鸿蒙生态崛起的机遇有什么
鸿蒙生态系统的崛起为各个领域带来了多个机遇,主要体现在以下几个方面: 智能设备的互联互通:鸿蒙系统旨在实现不同设备之间的无缝连接,为物联网(IoT)设备的发展提供了良好的基础。这将推动智能家居、智慧城…...
写入json和读取json文件
/// <summary> ///写入文件 /// </summary> /// <param name"Stns"></param> /// <returns></returns> public ActionResult WriteJsonFile(string Stns) { strin…...
【Java基础入门篇】前言
Java基础入门篇 本系列内容主要针对Java基础知识,总共包含四大部分内容: 变量、数据类型和运算符控制语句和递归算法面向对象和JVM底层分析数组和排序 学习需要具备: IDEA编译器 JDK1.8版本 写在前面 在Java入门的最开始,我们需…...
LangChain——管道提示词 缓存
管道提示词 管道提示词可以将多个提示组合在一起。当我们想要使用部分提示时,这会很有用。这里可以通过PipelinePrompt来完成。 PipelinePrompt由两部分组成: 最终提示:返回的最终提示;管道提示:元组列表,…...
LangGPT社区创始人云中江树:用热爱与坚持点燃实战营课堂
书生大模型实战营第 4 期正在火热进行中,在这里,我们见证了众多同学的成长与进步。今天,让我们一起走进第 4 期导师、结构化提示词 LangGPT 社区创始人云中江树的故事。他的故事不仅是对知识改变命运的生动诠释,更是一段关于热爱与…...
Admin.NET框架使用宝塔面板部署步骤
文章目录 Admin.NET框架使用宝塔面板部署步骤🎁框架介绍部署步骤1.Centos7 部署宝塔面板2.部署Admin.NET后端3.部署前端Web4.访问前端页面 Admin.NET框架使用宝塔面板部署步骤 🎁框架介绍 Admin.NET 是基于 .NET6 (Furion/SqlSugar) 实现的通用权限开发…...
18:(标准库)DMA二:DMA+串口收发数据
DMA串口收发数据 1、DMA串口发送数据2、DMA中断串口接收定长数据包3、串口空闲中断DMA接收不定长数据包4、串口空闲中断DMA接收不定长数据包DMA发送数据包 1、DMA串口发送数据 当串口的波特率大于115200时,可以通过DMA1进行数据搬运,以防止数据的丢失。如…...
Unity 导出 xcode 工程 并给 Info.plist 文件添加字段
Unity 导出 xcode 工程 并给 Info.plist 文件添加字段 在 Editor 文件夹下新建 xxx.cs 脚本 实现静态方法 [PostProcessBuild]public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject){// Unity 导出 Xcode 工程自动调用这个方法 }例子 一 us…...
打造高质量技术文档的关键要素(结合MATLAB)
在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它不仅是知识传承的载体,也是团队协作的桥梁,更是产品成功的幕后英雄。打造出色的技术文档并非易事,以下将从多个方向探讨如何做到这一点。 文章目录 方向一:…...
C语言-数组
数组的创建 数组结构式 数组类型 数组名称 数组大小 内容 列如 char Arr[3]{1,2,3} int Arr[3]{1,2,3} 注意:在C99之前,【】中需要一个常量才可以 数组的初始化 初始化就是给它赋值,初始化分为完全初始化和非完全初始化 完全初始化…...
hhdb数据库介绍(10-19)
监控 智能物理拓扑 物理拓扑图主要以服务器为视角展示集群组件与服务器的所属关系,同时可查看服务器资源的使用情况以及各集群组件服务运行状态。使用前需保证为集群服务器配置了可用的SSH连接信息,否则只能查看当前服务器与集群组件的所属关系&#x…...
AI开发:生成式对抗网络入门 模型训练和图像生成 -Python 机器学习
阶段1:GAN是个啥? 生成式对抗网络(Generative Adversarial Networks, GAN),名字听着就有点“对抗”的意思,没错!它其实是两个神经网络互相斗智斗勇的游戏: 生成器(Gene…...
68 mysql 的 临键锁
前言 我们这里来说的就是 我们在 mysql 这边常见的 一种锁, 行临键锁 虽然 在平时我们用到的不是很多, 我们这里 主要是 讲一下 它的主要的触发的场景 行临键锁 等价于 行锁 间隙锁, 行间隙锁是一个 左开右开的区间, 行临键锁 是一个左开右闭的区间 但是 它 和 行锁的差异…...
(十一)Python3 接口自动化测试,Pytest-Allure报告的使用
(十一)Python3 接口自动化测试,Pytest-Allure报告的使用 1、安装和使用 1、安装pytest和allure-pytest插件: pip install pytest allure-pytest 2、在你的pytest测试用例中使用allure装饰器或者上下文管理器来生成报告。 例如,你可以使用@allure.feature装饰器来标记特性…...