五、Git本地仓库基本操作——分支管理
1. 什么是分支?
master分支
我们在初始化git仓库的时候,会默认创建一个master分支,HEAD指针这时就会默认执行master分支。当我们在master分支提交(commit)了更新之后,master分支就会指向当前当前最新的commit。看下图比较好理解:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SR76gqQN-1676116725836)(../picture/image-20221203233059324.png)]](https://img-blog.csdnimg.cn/11cefaf0a474498a9443143a33e47b26.png)
创建新的分支后HEAD指针移动情况
但是随着时间的推移,我们可能会一个版本在原来的基础上改动很大,或者说其他同事在主分支上创建自己的分支进行独立开发,然后开发验证完毕之后再合并到master分支。
比如我们在master分支创建debug分支,刚创建时debug分支会指向master分支相同的commit提交的位置,并且git会更改HEAD指针指向新的分支debug。如下图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYti5UAM-1676116725837)(../picture/image-20230211160937422.png)]](https://img-blog.csdnimg.cn/bca04968714249c3a8c0da95cfccfc31.png)
这里创建一个新分支,其实就是HEAD指针指向了新的分支,工作区的内容并没有改变。
这时,我们就会在debug分支上面进行开发工作,commit到debug分支了。比如我们在debug分支上提交了两次commit,那么debug分支会往前移动两次,但是master分支是不变的。如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c0YMUBQy-1676116725837)(…/picture/image-20230211161559195.png)]
debug分支与master分支合并
上面我们创建了debug分支,如果我们做完了debug分支的工作,想合并到master分支怎么合并。通过上图我们可以知道,简单的方法就是把master分支也指向debug分支的commit即可,这样master分支和debug分支就又指向了同一个最新的commit了。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hpv9HgPU-1676116725838)(../picture/image-20230211162203020.png)]](https://img-blog.csdnimg.cn/f1ac315859724114bbc8f77c2298bd53.png)
合并完之后,如果不需要debug分支了,我们可以删除debug分支。
2. 为什么需要分支?
分支其实就是为了更方便的对一个项目进行版本控制。上面我们也提到,多个人进行协同开发,每个人可以创建自己的独立分支,等到测试验证OK了,那么就可以合并到主分支,这样在开发过程中不会影响到master分支。
- 可以多人在各自分支进行独立开发
- 各个分支互相独立,互不影响,各自的分支开发完成就可以合并到主分支
3. 分支的具体操作
3.1 查看分支
git branch # 查看当前分支
git branch -v # 查看当前分支,并列出最近一次提交
git branch -a # 查看本地的所有分支
git branch -r # 查看远程分支
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZKSyOJ7-1676116725838)(../picture/image-20230211170625945.png)]](https://img-blog.csdnimg.cn/ce3a3cff1e6e40269505d40a3e6f099b.png)
3.2 新建分支
git branch <分支名称>
git checkout -b <分支名称> # 创建并切换到该分支,相当于两条命令

3.3 切换分支
git checkout <分支名>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YRJqvQC1-1676116725839)(../picture/image-20230211173006520.png)]](https://img-blog.csdnimg.cn/8fad25b3f297467a8c0fde8c0af6301a.png)
记录:我在工作的电脑上试过切换分支,如果在当前已经有的修改还没有commit的话,那么git是不让切换的,切换失败。但是在我自己的笔记本使用,又可以正常切换。不知道怎么回事,这里记录下,后面慢慢了解。
当我们切换完分支之后,在这个分支上一样可以git add追踪文件、git commit提交到本地仓库等操作。
3.4 分支的合并
git merge 想要合并的分支名称
分支合并之前,需要先切换到想要合并的分支,然后再执行分支合并命令。
比如,我在debug分支做的修改,想合并到master分支。那么首先就要切换到master分支,然后再执行 git merge 合并命令。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xl0hFqnO-1676116725839)(../picture/image-20230211175802589.png)]](https://img-blog.csdnimg.cn/f1d8c65cc0e4497f99a225ce38f73c23.png)
下面,我们在debug分支做一些更改,并且提交更新到该分支。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPFZKNKI-1676116725839)(../picture/image-20230211180910496.png)]](https://img-blog.csdnimg.cn/c6bc51d2835b452d87d5087e5de9f36a.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u7fYWidR-1676116725839)(../picture/image-20230211181005483.png)]](https://img-blog.csdnimg.cn/a21ff50525ea4f57be308c4970c31d28.png)
3.5 删除分支
git branch -d 分支名称
上面,我们已经吧debug分支合并到主分支了,如果觉得debug分支不再使用,那么我们可以删除该分支。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZigWcuJ-1676116725840)(../picture/image-20230211181328227.png)]](https://img-blog.csdnimg.cn/68f9a0e8895f4bdf9c740ef907bfd153.png)
4. 分支合并产生的冲突问题解决
4.1 冲突如何产生
同一个文件的同一个地方的内容,被不同的分支修改了,并且提交了commit的。
比如我上面创建的debug分支修改了test.c文件的第8行,然后commit;然后再切换到master分支,master分支同样修改了tset.c文件的第8行,然后commit。这个时候,我们想要吧debug分支内容合并到master分支,那么就会产生冲突。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-od72Vt9S-1676116725840)(../picture/image-20230211185847584.png)]](https://img-blog.csdnimg.cn/54c35a0468d9433b9d261b63a3206382.png)
4.2 冲突解决
上面,我们执行 git merge debug 命令后会自动合并的,但是冲突的原因,进入了手动合并的模式,git 命令行也提示了MERGING字样。
手动合并的操作步骤:
1、执行 git status 命令,确认需要手动合并的文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdjuInHE-1676116725840)(../picture/image-20230211190152890.png)]](https://img-blog.csdnimg.cn/f1ded910096a4bce85bcd2e626366061.png)
2、打开该文件,确认自己需要保留那些内容,删除哪些内容。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c0vyQ7qH-1676116725841)(../picture/image-20230211190455465.png)]](https://img-blog.csdnimg.cn/eef1e5cd4bc046ce94fa2cb12ae5e943.png)
3、删除保存之后,我们就可以提交到暂存区,然后commit到本地仓库了。commit到本地仓库之后,就会退出手动合并的模式。

相关文章:
五、Git本地仓库基本操作——分支管理
1. 什么是分支? master分支 我们在初始化git仓库的时候,会默认创建一个master分支,HEAD指针这时就会默认执行master分支。当我们在master分支提交(commit)了更新之后,master分支就会指向当前当前最新的co…...
vscode搭建python Django网站开发环境
这里使用pip安装的方式,打开命令行,输入执行: pip install django2.2这里选择安装2.2版本是因为是新的lts版本,长期支持稳定版。 接下来再安装pillow,Django底层一部分是基于pillow进行的。 pip install pillowpylint…...
【mybatis】实现分页查询
一 .使用原生分页器的实体类 1.1 java代码部分 方法多 不易书写 package cn.bdqn.entity;public class Page {private Integer pageIndex;//页码private Integer pageSize;//页大小 显示多少行数据private Integer totalCounts;//数据的总行数private Integer totalPages;//…...
CF1560D Make a Power of Two 题解
CF1560D Make a Power of Two 题解题目链接字面描述题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码实现备注题目 链接 https://www.luogu.com.cn/problem/CF1560D 字面描述 题面翻译 给定一个整数 nnn。每次操作你可以做两件事情中的一件&am…...
C#开发的OpenRA的读取文件的函数
C#开发的OpenRA的读取文件的函数 在OpenRA游戏里,读取文件是必备的功能。 因为游戏大部分文件都是图片、动画、语音。 很久以前,我以为开发游戏的主要功能是在程序开发上, 其实游戏的大部分工作都不是在开发上,而是在美工方面。 因为游戏跟电影是一样,就是不断地展示场景,…...
SpringBoot结合XXL-JOB实现定时任务
Quartz的不足 Quartz 的不足:Quartz 作为开源任务调度中的佼佼者,是任务调度的首选。但是在集群环境中,Quartz采用API的方式对任务进行管理,这样存在以下问题: 通过调用API的方式操作任务,不人性化。需要…...
【Node.js】 创建web服务器
Node.js什么是客户端,什么是服务器服务器和普通电脑的区别什么是http模块导入http模块服务器相关概念创建web服务器的基本步骤req请求对象req响应对象解决中文乱码根据不同的url响应不同的html内容什么是客户端,什么是服务器 客户端在网络节点中&#x…...
基于go语言实现RestFul交互
一、RestFul 1.1 RestFul的介绍 RESTFUL(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP或HTTPS,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景&…...
情感溢出:读《浣溪沙》
浣溪沙 谁念西风独自凉 作者 纳兰性德 谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳。 被酒莫惊春睡重,赌书消得泼茶香,当时只道是寻常。 记得年轻时学这篇词,就是愣背,现在也就记得这句当时只道是寻常…...
深入解读.NET MAUI音乐播放器项目(一):概述与架构
系列文章将分步解读音乐播放器核心业务及代码: 深入解读.NET MAUI音乐播放器项目(一):概述与架构深入解读.NET MAUI音乐播放器项目(二):播放内核深入解读.NET MAUI音乐播放器项目(三…...
【Python小游戏】某程序员将套圈游戏玩儿到了巅峰,好嗨哟~Pygame代码版《牛牛套圈》已上线,大人的套圈游戏太嗨了,小孩勿进。
前言 世上选择那么多。 关注栗子同学会是您最明智的选择哦。 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 “幸运牛牛套圈圈”套住欢乐,圈住幸福,等你来挑战…...
php的declare命令如何使用?
php中的declare结构用来设定一段代码的执行指令declare用于执行3个指令:ticks,encoding,strict_typesdeclare结构用于全局范围,影响到其后的所有代码(但如果有declare结构的文件被其他文件包含,则对包含他的父文件不起作用&#x…...
嵌软工程师要掌握的硬件知识2:一文看懂什么开漏和推挽电路(open-drain / push-pull)
想了解开漏和推挽,就要先了解一下三极管和场效应管是什么,在其他章节有详细介绍,本文就不再进行赘述。 1 推挽(push pull)电路 1.1 理解什么是推挽电路 - 详细介绍 如图所示,Q3是个NPN型三极管,Q4是个PNP型三极管。 1)当Vin电压为正时,上面的N型三极管控制端有电…...
1.2.6存储结构-磁盘管理:单缓冲区与双缓冲区读取、流水线周期、计算流水线执行时间
1.2.6存储结构-磁盘管理:单缓冲区与双缓冲区读取、流水线周期、计算流水线执行时间流水线周期计算流水线执行时间微秒,时间单位,符号μs(英语:microsecond ),1微秒等于百万分之一秒(…...
【pytest接口自动化测试】结合单元测试框架pytest+数据驱动模型+allure
api: 存储测试接口 conftest.py :设置前置操作 目前前置操作:1、获取token并传入headers,2、获取命令行参数给到环境变量,指定运行环境commmon:存储封装的公共方法 connect_mysql.py:连接数据库http_requests.py: 封装…...
展锐平台WIFI吞吐问题解决方案
同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 一、Wi-Fi 吞吐验收标准 预置条件:屏蔽房;DUT 距离 AP 1m 左右;测试 AP 不加密;…...
全局向量的词嵌入(GloVe)
诸如词-词共现计数的全局语料库统计可以来解释跳元模型。 交叉熵损失可能不是衡量两种概率分布差异的好选择,特别是对于大型语料库。GloVe使用平方损失来拟合预先计算的全局语料库统计数据。 对于GloVe中的任意词,中心词向量和上下文词向量在数学上是等…...
华为OD机试 - 特异性双端队列(Python),真题含思路
特异性双端队列 题目 有一个特异性的双端队列,该队列可以从头部到尾部添加数据,但是只能从头部移除数据。 小 A 一次执行 2 n 2n 2n 个指令往队列中添加数据和移除数据, 其中 n n n 个指令是添加数据(可能从头部也可以从尾部添加) 依次添加 1 到...
【Linux】操作系统进程概念
文章目录1. 冯诺依曼体系结构2. 操作系统3. 进程进程的基本概念查看进程和杀死进程父进程和子进程通过系统调用创建子进程1. 冯诺依曼体系结构 冯诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。数学家冯诺依曼提出了计算…...
C语言const的用法详解
有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用const关键字对变量加以限定:constin…...
Aider:AI结对编程实战,从原理到项目级代码编辑
1. 项目概述:当AI成为你的结对编程伙伴如果你是一名开发者,大概率经历过这样的场景:面对一个需要修改的复杂函数,你清楚地知道要做什么,但就是不想动手去敲那一行行重复或繁琐的代码;或者,在深夜…...
DeepChat:开源AI智能体平台,统一管理多模型与工具的工作台
1. 项目概述与核心价值如果你和我一样,每天需要在多个AI模型之间来回切换——写代码时用Claude,查资料时用GPT,跑本地模型时又得打开Ollama的命令行——那么你肯定也受够了这种碎片化的体验。更别提那些复杂的工具调用、技能配置,…...
Python自动化脚本:模拟鼠标键盘输入保持系统活跃状态
1. 项目概述:当你的电脑需要“假装在线”你有没有遇到过这样的场景:公司要求电脑必须保持在线状态,否则会被判定为“离开”或“闲置”,影响考勤或系统状态;或者,你在运行一个需要持续交互的软件,…...
对话记忆与上下文管理:Spring AI 实现多轮会话与持久化存储
系列导读 你现在看到的是《Spring AI 企业级集成与场景实践:从零搭建智能应用》的第 3/10 篇,当前这篇会重点解决:教会读者如何在 Spring AI 中优雅地管理对话上下文,避免重复输入和 Token 浪费。 上一篇回顾:第 2 篇《多模型适配实战:在 Spring AI 中统一管理 OpenAI、…...
从“左撇子困境”看包容性设计:打破设计偏见,提升产品普适性
1. 设计中的“左撇子困境”:一个被忽视的普适性问题作为一名在硬件设计和产品开发领域摸爬滚打了十几年的工程师,我经常和团队讨论“用户体验”和“人机工程学”。这些词听起来高大上,但它们的本质,往往就藏在一些最不起眼的日常细…...
数据中心48V直连供电架构:从效率瓶颈到硬件设计实战
1. 数据中心供电演进:从香农理论到48V直连架构1948年,克劳德香农发表《通信的数学理论》,用1和0的二进制语言为信息时代奠基。六十八年后的今天,当我们谈论数据中心——这个承载着全球信息洪流的数字心脏时,讨论的焦点…...
ChatGPT Discord机器人开发全链路拆解(含Rate Limit绕过策略与上下文记忆优化)
更多请点击: https://intelliparadigm.com 第一章:ChatGPT与Discord机器人开发全链路概览 构建一个能调用 ChatGPT 能力的 Discord 机器人,需跨越 API 集成、身份认证、消息路由与状态管理四大核心层。该链路并非单向调用,而是一…...
27岁裸辞转网安:从传统行业到网安,我踩通了这条路
27 岁女生从传统行业裸辞转网络安全,3 个月拿到大厂 offer:这行真的没你想的那么难 后台经常收到私信,问我一个做了 4 年传统行业(之前是线下品牌运营)的女生,为什么突然 “跨界” 转做网络安全࿱…...
NoFences完整指南:免费开源工具彻底解决Windows桌面杂乱问题
NoFences完整指南:免费开源工具彻底解决Windows桌面杂乱问题 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为杂乱的Windows桌面图标而烦恼吗?No…...
从国赛H题到实战:构建远程幅频特性测试系统的硬件设计精要
1. 从竞赛到实战的硬件设计转型 参加电子设计竞赛的朋友们都知道,国赛H题这类题目往往能给我们带来宝贵的实战经验。2017年的这道远程幅频特性测试装置题目,看似是一个具体的竞赛任务,实则蕴含了许多通用硬件设计原理。我在实际项目中多次运用…...
