【Git】分支管理

文章目录

    • 一、理解分支
    • 二、创建、切换、合并分支
    • 三、删除分支
    • 四、合并冲突
    • 五、合并模式
    • 六、分支策略
    • 七、bug分支
    • 八、强制删除分支


努力经营当下 直至未来明朗!

一、理解分支

  1. HEAD指向的是master分支,master中指向的是最新一次的提交,也就是master中存储得到最新一次提价的commit_id。

  2. 在gitcode仓库底下,cat .git/refs/heads/master就可以打印出master中的内容,即最新一次提交的commit_id。
    git cat-file -p [commit_id] 就可以打印出该commit_id的相关信息
    0

  3. master主分支:其实就相当于是每次提交的结果锁串成的线。
    1


二、创建、切换、合并分支

  1. 查看当前本地仓库有哪些分支:git branch
  2. HEAD其实是可以指向其他分支的,被指向的分支就是当前正在工作的分支。
  • master就说明当前工作的分支就是master
    1
  1. 创建本地分支:git branch [分支名]
    2

  2. 新建的分支是指向创建该分支的时候所站的版本上的,即该版本的commit_id
    3

  3. 切换分支,重新设置当前的工作分支,即HEAD指向新的分支
    git checkout [分支名]
    5

  4. 在dev分支上提交的内容在master分支上找不到,因为master和dev分支都是指向在各自分支上的最新提交
    6

  5. 合并分支:首先看目前在哪个分支上git branch -> 切换到想要合并到的分支上git checkout [分支名] -> 合并分支git merge [被合并的分支] -> 此时该分支就指向了被合并分支的最新一次提交
    (fast-forward是快速模式)
    7


三、删除分支

  1. 在合并了分支之后,被合并的分支就可以被删除了
    git branch -d [要删除的分支]
    8

  2. 注意:只能在其他分支上删除该分支,本分支上不能删除本分支。
    9

  3. 因为创建、合并和删除分支非常快,所以Git鼓励使用分支完成某个任务,合并后再删除分支,这和直接在master分支上工作的效果是一样的,但是过程更安全。


四、合并冲突

  1. 在merge合并分支的时候是可能出现冲突的。

  2. 如果相对分支A上的某个文件file中的内容进行升级,此时就需要重新创建一个分支B对文件file中的内容进行修改,而与此同时分支A也对文件file中的内容进行了修改;而分支B最后是要合并到分支A上的,此时就会出现合并冲突问题。

  3. 创建一个分支并将当前分支切换到新分支上 git checkout -b [新分支]

  4. git add . 将当前目录下的所有修改提交到暂存区

  5. 不同分支对同一个文件修改之后进行分支的合并,此时就会出现合并冲突
    10
    11

  6. vim [文件名] 可以进入文件查看冲突内容,其中 <<< >>>中的内容即是冲突内容。
    12

  7. 想要保留的是什么内容是由开发人员决定的,所以开发人员就要进行手动修改文件内容并进行保存,然后重新进行add和commit,此时保存的就是解冲突之后的结果。
    13

  8. 解完冲突并合并分支,master存储的是最新一次的提交,即接完冲突之后的提交
    15

  9. git log 搭配参数的使用
    git log --graph --abbrev-commit 将提交commit进行图视化
    16


五、合并模式

  1. fast forward模式(ff模式)进行合并分支,使用该种模式合并分支的时候,master会指向最新合并的分支指向的commit_id,也就分不清该次提交是merge还是正常commit来的。
    17
    18

  2. no-ff模式:可以更加方便地追溯到此次的提交的是merge进来的还是正常commit,方便追溯到对应的人。(推荐使用
    git merge --no-ff -m "描述信息" [被合并的分支名]
    19


六、分支策略

master分支是稳定的,一般用于存储线上环境的代码。
20


七、bug分支

  1. 当线上环境(即master主分支)上出现bug的时候,不要直接在master主分支上进行修改,而是在本地专门创建一个修复master分支上bug的分支,然后测试团队测试之后再将该代码分支合并到master主分支上。
  2. 不能在master主分支上直接进行bug修复的原因:可能改出更大的bug,对线上环境影响较大。
  3. 模拟环境:开发在dev2分支上开发了部分代码,但是还未提交,此时master主分支上出现了bug。此时需要新建一个专门的修复bug的分支来修复bug,则首先切到master分支上来新建一个修复bug的分支。
    1)dev2分支上修改的代码在master分支的工作区中出现,即影响了master分支。
    21
    2)不想影响master分支,此时将当前分支切换到dev2分支上,并将工作区中的内容进行储存操作git stash -> 可以使用tree .git/进行查看,发现多了refs/stash来存储工作区中的内容 -> 此时工作区中就是干净的
    22
    23

3)stash中存储的是已经被git追踪管理的内容。因为file3并没有提交到git中被git追踪管理,所以是不能在stash中进行存储的,即git stash命令不可用。
25

4)此时就切换到master分支上新建一个修复bug的分支 -> 并对有bug的文件进行修改,修改完成之后提交到该分支上 -> 切换到master主分支上并将修复分支上的代码合并到master主分支上
26

5)dev2分支还没有开发完成,此时就需要切换回dev2分支继续进行开发,但是cat 该文件之后发现该文件中之前开发了部分的代码不见了,这些内容已经被放到了stash中进行存储 -> 此时就需要将stash中的内容恢复到该dev2分支的该文件中进行继续开发
git stash list 可以查看当前stash中存储的内容
git stash pop 可以将stash中存储的内容恢复到该分支的文件中
27
6)此时就可以继续对dev2分支进行开发,开发完成之后就可以对代码进行提交,但是此时的状态如下,直接将dev2分支合并到master分支上可能会存在冲突
28
7)为了避免将dev2分支合并到master主分支之后影响master住分支,就将master主分支合并到dev2分支上,这样合并后即使有问题也可以在本地分支dev2上进行多次修改测试,不会影响master主分支中的代码 -> 将问题在dev2分支上解决完之后再将代码合并到master主分支上
29
30

8)修复并合并完分支之后就可以将该修复分支进行删除了
git branch -d [分支名]


八、强制删除分支

  1. 在分支A已经被merge了之后想要删除分支A:git branch -d [分支A]
  2. 若分支B还没有被merge过,此时直接该分支B是受保护的,不能直接使用git branch -d [分支B]进行删除。
  3. 如果想要删除还没有被合并的分支每次是就需要强心进行删除,即git branch -D [分支名],但是注意:不能在当前分支上删除当前分支,必须要进行分支的切换!!!
    31

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

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

相关文章

消息中间件介绍

消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件&#xff0c;如ActiveMQ、RabbitMQ&#xff0c;Kafka&#xff0c;还有阿里巴巴…

ElementUI中的日历组件加载无效的问题

在ElementUI中提供了一个日历组件。在某些场景下还是比较有用的。只是在使用的时候会有些下坑&#xff0c;大家要注意下。   官网提供的信息比较简介。我们在引入到项目中使用的时候可以能会出现下面的错误提示。 Unknown custom element: <el-calendar> - did you …

Qt文件系统操作和文件的读写

一、文件操作类概述 QIODevice&#xff1a;所有输入输出设备的基础类 QFile&#xff1a;用于文件操作和文件数据读写的类QSaveFile&#xff1a;用于安全保存文件的类QTemporaryFile&#xff1a;用于创建临时文件的类QTcpSocket和QUdpSocket&#xff1a;分别实现了TCP和UDP的类…

再学http-为什么文件上传要转成Base64?

1 前言 最近在开发中遇到文件上传采用Base64的方式上传&#xff0c;记得以前刚开始学http上传文件的时候&#xff0c;都是通过content-type为multipart/form-data方式直接上传二进制文件&#xff0c;我们知道都通过网络传输最终只能传输二进制流&#xff0c;所以毫无疑问他们本…

C语言实例_双向链表增删改查

一、双向链表介绍 双向链表&#xff08;Doubly Linked List&#xff09;是一种常见的数据结构&#xff0c;在单链表的基础上增加了向前遍历的功能。与单向链表不同&#xff0c;双向链表的每个节点除了包含指向下一个节点的指针外&#xff0c;还包含指向前一个节点的指针。 作用…

Docker之Compose

目录 前言 一、Docker-compose概述 1.1Docker Swarm与Docker Compose 1.1.1Docker Swarm 1.1.2Docker Compose 1.1.2.1 三层容器 ​编辑 二、YAML 2.1YAML概述 2.2注意事项 2.3Docker Compose 环境安装 2.3.1下载 三、Docker-Compose配置常用字段 四、Docker-com…

高手进阶之路---pyqt自定义信号

高手进阶之路—pyqt自定义信号 1.思考问题为什么要自定义信号&#xff0c;qt5本身已有信号槽函数 # pushButton 被clicked的时候connect 函数print self.pushButton.clicked.connect(self.print)def print(self):print("我被点击了")或者使用 # 需要引入 pyqtSlo…

C#__自定义类传输数据和前台线程和后台线程

// 前台线程和后台线程 // 默认情况下&#xff0c;用Thread类创建的线程是前台线程。线程池中的线程总是后台线程。 // 用Thread类创建线程的时候&#xff0c;可以设置IsBackground属性&#xff0c;表示一个后台线程。 // 前台线程在主函数运行结束后依旧执行&#xff0c;后台线…

基于DolphinScheduler的调度流程梳理及落地实践

目 录 01 背景‍ 02 主流调度引擎 ‍‍‍‍‍‍‍ 03 DolphinScheduler核心概念及调度过程‍‍‍‍‍‍ 04 开发实践 01‍ 背景‍‍ 随着数据中台概念及相关技术逐渐成熟、落地&#xff0c;不断有企业将其应用到自身业务中&#xff0c;将原本分散的各系统数据进行整合、分析…

JavaWeb_LeadNews_Day7-ElasticSearch, Mongodb

JavaWeb_LeadNews_Day7-ElasticSearch, Mongodb elasticsearch安装配置 app文章搜索创建索引库app文章搜索思路分析具体实现 新增文章创建索引思路分析具体实现 MongoDB安装配置SpringBoot集成MongoDB app文章搜索记录保存搜索记录思路分析具体实现 查询搜索历史删除搜索历史 搜…

三个视角解读ChatGPT在教学创新中的应用

第一&#xff0c;我们正处于一个学生使用ChatGPT等AI工具完成作业的时代&#xff0c;传统的教育方法需要适应变化。 教育工作者不应该因为学生利用了先进技术而惩罚他们&#xff0c;相反&#xff0c;应该专注于让学生去挑战超越AI能力范围的任务。这需要我们重新思考教育策略和…

安卓系列机型永久去除data分区加密 详细步骤解析

安卓机型玩机搞机刷写第三方twrp存储出现乱码 存储不显示等情况都是没有解密data分区的原因。用户需要在twrp里格式化data分区重启后存储显示正常。那么这个操作后你的数据分区就会呗彻底清除。 今天主要解析下如何操作可以永久解密data分区。其实data分区加密原则上也是厂商为…

Kaggle回归问题Mercedes——Benz Greener Manufacturing

目录 前言1 题目介绍2 数据清洗3 数据可视化分析4 模型训练5 源码 前言 这是我在大三选修课的课程设计&#xff0c;内容参考了Kaggle上高赞的代码&#xff0c;有详细批注&#xff0c;整体比较基础&#xff0c;结构相对完整&#xff0c;便于初学者学习。这个是一个回归问题&…

webscoket在vue中的使用

项目场景&#xff1a; 提示&#xff1a;项目相关背景&#xff1a; 什么是webscoket&#xff1f;: WebSocket是一种计算机通信协议&#xff0c;通过单个TCP连接提供全双工通信信道。实现了web客户端和服务器之间的实时通信&#xff0c;与传统的HTTP连接相比&#xff0c;允许以…

设计模式笔记

工厂模式&#xff1a; 1.Simple Factory Pattern : 是指由一个工厂对象决定创建出哪一种产品类的实例&#xff0c;简单工厂是产品的工厂&#xff0c;工厂类负责创建的对象较少&#xff0c;客户端需要传入工厂类的参数&#xff0c;对于如何创建对象的逻辑不关心。 缺点&#xf…

Unity3d:GameFramework解析:实体,对象池,资源管理,获取计数,引用计数,自动释放

基本概念 1.GF万物基于引用池IReference 2.ObjectBase : IReference类的m_Target持有unity中Mono&#xff0c;资源&#xff0c;GameObejct 3.AssetObject : ObjectBase类m_Target持有Assetbundle中的Asset&#xff0c;具有获取&#xff0c;引用两个计数管理释放 4.ResourceObj…

线索二叉树——找前驱、后继

前言 一个二叉树被线索化之后&#xff0c;一个节点的前驱或后继会存在两种情况&#xff0c; 1、tag1&#xff0c;有明确的线索化前驱或后继&#xff0c; 2、tag0&#xff0c;只存在左右孩子&#xff0c;但是没用明确的线索化前驱后继&#xff0c;需要分析 //线索二叉树结点定义…

如何将PC电脑变成web服务器:将内网主机映射到外网实现远程访问

如何将PC电脑变成web服务器&#xff1a;将内网主机映射到外网实现远程访问 我是艾西&#xff0c;今天跟大家分享内容还是比较多人问的一个问题&#xff1a;如何将PC电脑变成web服务器。内网主机作为web服务器&#xff0c;内容包括本地内网映射、多层内网映射解决方案、绕过电信…

Linux socket网络编程概述 和 相关API讲解

socket网络编程的步骤 大体上&#xff0c;连接的建立过程就是&#xff1a;服务器在确定协议类型后&#xff0c;向外广播IP地址和端口号&#xff0c;并监听等待&#xff0c;直到客户端获取了IP地址和端口号并成功连接&#xff1a; 使用socket来进行tcp协议的网络编程的大体步骤…

创邻科技张晨:图数据库,激活数据要素的新基建

“数据经济时代&#xff0c;数据要素产业链的各细分领域均蕴含机遇&#xff0c;图技术作为网络协同和数据智能的底层发动机&#xff0c;将深度掘金数字中国价值潜能”。 8月22日&#xff0c;在2023中国&#xff08;南京&#xff09;国际软件产品和信息服务交易博览会的信息技术…