Git | 分支管理

news/2024/10/18 8:35:19/

Git | 分支管理

文章目录

  • Git | 分支管理
    • 1、理解分支
    • 2、创建分支&&切换分支
    • 3、合并分支
    • 4、删除分支
    • 5、合并冲突
    • 6、分支管理策略
      • 合并分支模式
      • 实际工作中分支策略
      • bug分支
      • 删除临时分支

1、理解分支

分支就类似分身。

  1. 在版本回退中,每次提交Git都会将修改以git对象的形式串联成一条时间线/分支。

  2. 只有一条默认的时间线,这个分支就叫master分支

  3. HEAD并不严格指向提交,而是指向分支,如果当前的分支是master,那么就会有下边的情况在这里插入图片描述

  4. 每次提交master都会向前移动

2、创建分支&&切换分支

  1. 查看当前本地分支:git branch

    HEAD指针指向:master

  2. 新建分支dev:git branch dev

  3. 查看当前分支:git branch

  4. 切换到master分支:git checkout dev

    HEAD指针指向:dev
    在这里插入图片描述

3、合并分支

比如dev分支中ReadMe后边追加了一行,i am coding,之后想要合并到Master上。

说明:为了避免合并冲突,一般会先提交,之后将master分支合并到dev上边,看是否有冲突,有则解决,无则继续操作。

4、删除分支

合并完成后dev分支没用就可以被删除掉。

如果想要删除,我们需要在其他分支上,如master分支

  1. 查看当前分支:git branch
  2. 切换到Master分支:git checkout master
  3. 删除分支:git branch -D dev
  4. 再次查看分支,发现已被删除:git branch
    在这里插入图片描述

5、合并冲突

在实际分支合并的时候,可能存在代码冲突的问题。

例如,现在master分支和dev分支分别对ReadMe文件进行修改并提交,dev分支在原文本后边添加i am coding,master 在文本后边添加finish并且分别add和commit,再尝试将dev分支合并至master分支时就会出现合并冲突的情况:

  1. dev分支下修改并提交:在这里插入图片描述

  2. 切换至master分支下修改并提交:在这里插入图片描述

  3. 在Master分支下合并dev分支:可以看到冲突在ReadMe文件在这里插入图片描述

  4. 我们查看ReadMe文件在这里插入图片描述

    其中<<<到===之间就是当前分支上的代码,后边的是dev分支上的代码,冲突的都在这里。

    我们需要手动决定到底要怎么决定

  5. 假设我们保留i am coding,把其他不需要的删除,还需要add和commit操作在这里插入图片描述

    此时master分支是最新的提交,dev还是原来的

可以看一下日志:

git log --graph --pretty=oneline --abbrev-commit 在这里插入图片描述

也可以证明我们刚刚的提交是merge的提交

另外合并完成之后,dev分支不使用了就可以删除:(删除dev分支就需要让HEAD指针指向别的分支)

在这里插入图片描述

6、分支管理策略

合并分支模式

合并分支模式有两种

  1. Fast forward模式 :merge默认情况,这次模式下,我们删除分支,查看分支历史时,就会丢掉分支信息,不知道最新提交是merge进来的还是正常提交的
  2. –no-ff方式:即强制禁用Fast forward模式。使用时注意要让master指向新的提交即使dev分支已经删除,也可以看到当前的提交是merge进来的还是由其他分支合并得到的

例如:

  1. 创建dev2分支,修改ReadMe,commit一次,切换至master分支,合并在这里插入图片描述

  2. 查看日志在这里插入图片描述

  3. 删除dev2分支再次查看日志在这里插入图片描述

    会发现使用禁用ff模式,仍然能看得到怎么来的

分支合并建议:

最好先在自己分支下合并master,有冲突在dev分支解决掉,再去master分支下进行merge【bug分支演示】

注意:合并完之后要进行一次提交

实际工作中分支策略

在这里插入图片描述

bug分支

master分支上有bug时,解决bug的流程:在git中,每个bug都可以通过一个新的临时分支来修复,修复完成之后合并分支,并将临时分支删除。

如果我们正在dev2分支上开发了部分代码,但是还没有提交,遇到bug怎么解决?

不要使用dev进行修理bug,否则就违背了dev分支初衷。

  1. 准备工作:创建dev2分支,并进行修改但不add和commit,切换到master在这里插入图片描述

  2. 如果不想看到,同时防止影响之后bug分支的修复,可以使用git stash命令将它暂时隐藏:在这里插入图片描述
    在这里插入图片描述

    会发现多了stash【只存储已经被git追踪管理的文件】

    再次查看状态,发现不再受原来dev2分支影响在这里插入图片描述

  3. 修复bug在这里插入图片描述

  4. 合并到master上在这里插入图片描述

  5. 切回dev2分支,恢复工作区,再次查看工作区内容:在这里插入图片描述

  6. 开发完dev2,提交后,在dev2分支合并master分支,并解决冲突在这里插入图片描述

  7. 切换到master分支上,进行merge在这里插入图片描述

\解决带有修复bug冲突的文件时,把当前的最好放在解决bug之后

删除临时分支

git branch -d dev2

强制删除:git branch -D dev2


http://www.ppmy.cn/news/1431022.html

相关文章

Android屏幕亮度

Android屏幕亮度 本篇文章主要介绍下android 屏幕亮度相关的内容. 1: 申请权限 修改屏幕亮度需要申请WRITE_SETTINGS权限 <uses-permission android:name"android.permission.WRITE_SETTINGS"tools:ignore"ProtectedPermissions" />WRITE_SETTIN…

蓝桥杯第17169题——兽之泪II

问题描述 在蓝桥王国&#xff0c;流传着一个古老的传说&#xff1a;在怪兽谷&#xff0c;有一笔由神圣骑士留下的宝藏。 小蓝是一位年轻而勇敢的冒险家&#xff0c;他决定去寻找宝藏。根据远古卷轴的提示&#xff0c;如果要找到宝藏&#xff0c;那么需要集齐 n 滴兽之泪&#…

oracle_申明与赋值

1.格式 --1.程序块结构 declare --申明部分 begin --执行部分 end&#xff1b; 2.写一个空的程序块 --1.程序块结构 declare --申明部分 begin --执行部分 null&#xff1b; end&#xff1b; 在控制台输出【hello world】 --2.简单的程序输入 DECLARE --申明部分 BEGIN --…

OpenCV-基于阴影勾勒的图纸清晰度增强算法

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 实现原理 大家在工作和学习中&#xff0c;无论是写报告还是论文&#xff0c;经常有截图的需求&#xff0c;比如图表、图纸等&…

Ruby中Rack中间件的作用是什么?如何应用?

在 Ruby 中&#xff0c;Rack 是一个 Web 服务器接口&#xff0c;它允许开发者使用统一的方式构建 Web 应用程序。Rack 中间件是 Rack 框架的一个核心概念&#xff0c;它可以在请求被传递给应用程序之前或之后对请求和响应进行处理。 Rack 中间件的作用包括但不限于&#xff1a…

【氮化镓】GaN HEMT SEEs效应影响因素和机制

研究背景&#xff1a;AlGaN/GaN HEMT因其在高电压、高温和高频率下的操作能力而受到关注&#xff0c;尤其在航空航天和汽车应用中&#xff0c;其辐射响应变得尤为重要。重离子辐射可能导致绝缘体失效&#xff0c;即单事件效应&#xff08;SEEs&#xff09;引起的栅介质击穿。 …

【入门篇】本章包括创建云项目、数据库的使用、云存储管理、云函数的基本使用、实战举例(小程序之云函数开发入门到使用发布上线实操)

云函数 云函数相当于服务器接口的概念,它并属于小程序端代码。它是以函数的形式运行后端代码来响应事件以及调用其他服务。运行环境是Node.js。 一、基创建云函数项目 打开微信开发者工具: 打开微信开发者工具,并登录你的微信开发者账号。 创建项目: 如果还没有创建项目,你…

npm 打包后自动压缩成zip文件

在package.json里面的scripts下面的build添加 powershell -NoProfile -ExecutionPolicy Unrestricted -Command ./zip.ps1 新的build就是 "build": "vite build && esno ./build/script/postBuild.ts && powershell -NoProfile -ExecutionP…