Git分支管理基本原理

原文全文详见个人博客:

Git分支管理基本原理上文已讨论过svn分支管理的基本原理,本文将继续探讨Git分支管理的基本原理,以便后续进行进一步的理解和对比:icon-default.png?t=N7T8https://www.coderli.com/git-branch-method/【Java学习交流(982860385)】加入群聊,大佬免费带飞:【Java学习交流(982860385)】

上文已讨论过svn分支管理的基本原理,本文将继续探讨Git分支管理的基本原理,以便后续进行进一步的理解和对比:

Git 的分支创建原理与 SVN 有很大的不同。Git 的分支是轻量级指针,指向特定的提交对象。以下是 Git 创建分支的基本原理和详细步骤:

Git 分支创建的基本原理

  1. 提交对象(Commit Object):

    • 每次提交都会创建一个提交对象,记录提交的内容、作者信息、提交信息以及指向上一个提交对象的指针(即父提交)。
    • 提交对象还包含一个指向树对象(Tree Object)的指针,树对象代表项目的目录结构和文件快照。
  2. 轻量级指针:

    • 分支实际上是一个指向特定提交对象的指针(引用)。
    • 创建分支就是创建一个新的指针,指向当前的提交对象。
    • 例如,main 分支指向当前最新的提交对象,创建新分支 feature 就是创建一个新的指针 feature,指向相同的提交对象。
  3. HEAD 指针:

    • HEAD 是一个特殊的指针,指向当前检出的分支。
    • 当你切换分支时,HEAD 会指向新的分支。

Git 创建分支的具体步骤

假设我们有一个项目的主分支 main,现在我们想创建一个新的分支 feature。具体步骤如下:

  1. 创建分支:

    • 使用 git branch <branch_name> 命令创建一个新的分支。
    • 例如,git branch feature 会创建一个名为 feature 的分支,该分支指向当前 main 分支指向的提交对象。
  2. 切换分支:

    • 使用 git checkout <branch_name> 命令切换到某个分支。
    • 例如,git checkout feature 会将 HEAD 指针移动到 feature 分支,使你在该分支上工作。
  3. 创建并切换分支:

    • 使用 git checkout -b <branch_name> 命令可以在创建新分支的同时切换到该分支。
    • 例如,git checkout -b feature 会创建并切换到 feature 分支。

具体分支示例

假设我们有以下提交历史和分支结构:

A---B---C  (main)
  1. 创建分支:

    • 假设我们现在创建一个名为 feature 的新分支,并切换到该分支:
    git checkout -b feature
    
    • git checkout -b feature 实际上执行了以下两步操作:
      • git branch feature:创建一个新的分支指针 feature,指向提交 C。
      • git checkout feature:将 HEAD 指针指向 feature 分支。 此时,分支结构如下:
    A---B---C  (main, feature)
    
  2. 提交更改:

    • 在 feature 分支上进行了一些更改并提交,生成一个新的提交对象 D:
    git commit -m "Add new feature"
    
    • git commit 创建了一个新的提交对象 D,并更新 feature 指针指向 D,同时 HEAD 继续指向 feature 分支。 此时,分支结构如下:
    A---B---C  (main)\D  (feature)
    
  3. 切换分支:

    • 现在切换回 main 分支:
    git checkout main
    
    • git checkout main 将 HEAD 指针重新指向 main 分支。 此时,分支结构如下:
    A---B---C  (main)\D  (feature)
    
  4. 合并分支:

    • 将 feature 分支合并回 main 分支:
    git merge feature
    
    • git merge feature 将 feature 分支的更改合并到 main 分支,生成一个新的合并提交对象 E,并更新 main 指针指向 E。 最终的分支结构如下:
    A---B---C---E  (main)\   /D  (feature)
    

优点

  • 轻量和快速:创建、切换和合并分支非常快速,因为这些操作只是移动指针。
  • 独立和并行开发:可以轻松创建分支进行独立开发,并在需要时合并回主干,不影响其他分支的开发工作。
  • 高效的分支管理:Git 的分支管理机制使得在同一个项目中进行多个并行开发任务变得高效和方便。

总结

Git 的分支创建原理基于轻量级指针,分支只是一个指向特定提交对象的引用。创建、切换和合并分支的操作非常快速和高效,这使得 Git 在处理并行开发和版本管理时表现出色。通过这种机制,Git 能够轻松管理大量分支,支持复杂的开发流程和协作模式。

欢迎加入频道【Java开发者乐园】,大佬免费指导:点击加入  

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

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

相关文章

Linux journalctl日志太长,如何倒序查看journalctl --reverse,journalctl -xeu

文章目录 需求实验方法一方法二 需求 Linux journalctl日志太长&#xff0c;如何倒序查看 我们通常关心的是最近的日志&#xff0c;但是每次打开日志都是按时间先后顺序显示的&#xff0c;如何倒序查看&#xff0c;请看下面&#xff1a; 实验 方法一 journalctl 命令默认按…

Linux工具相关介绍

目录 1.linux安装软件 2.Linux软件生态问题 3.linux软件包管理器yum 4.linux里面好玩的小命令 4.1安装源 4.2小火车 4.3人物说话情景 5.vim简单介绍 5.1简单认识 5.2代码编写 5.3命令模式 1.linux安装软件 1.1源代码安装&#xff1a;这个里面可能根据代码bug需要修改…

AI模型大比拼:Claude 3系列 vs GPT-4系列最新模型综合评测

AI模型大比拼&#xff1a;Claude 3系列 vs GPT-4系列最新模型综合评测 引言 人工智能技术的迅猛发展带来了多款强大的语言模型。本文将对六款领先的AI模型进行全面比较&#xff1a;Claude 3.5 Sonnet、Claude 3 Opus、Claude 3 Haiku、GPT-4、GPT-4o和GPT-4o Mini。我们将从性能…

huawei USG6001v1学习---防火墙高可靠性(双机热备)

1.什么是双机热备 如图&#xff1a;当左图的防火墙发生故障时&#xff0c;整个系统都会收到影响&#xff0c;而右图即使有防火墙发生故障&#xff0c;但是还有一台防火墙做备份&#xff0c;相对于只有一台防火墙&#xff0c;要可靠些。 由于防火墙上不仅需要同步配置信息&…

【数据分享】2013-2022年我国省市县三级的逐月SO2数据(excel\shp格式\免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000——2022年的省市县三级的逐月PM2.5数据和2013-2022年的省市县三级的逐月CO数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是我国2013——2022年的省…

DAY05 CSS

文章目录 1 CSS选择器(Selectors)8. 后代(包含)选择器9. 直接子代选择器10. 兄弟选择器11. 相邻兄弟选择器12. 属性选择器 2 伪元素3 CSS样式优先级1. 相同选择器不同样式2. 相同选择器相同样式3. 继承现象4. 选择器不同权值的计算 4 CSS中的值和单位1. 颜色表示法2. 尺寸表示法…

java中多态的用法

思维导图&#xff1a; 1. 多态的概念 多态通俗的讲就是多种形态&#xff0c;同一个动作&#xff0c;作用在不同对象上&#xff0c;所产生不同的形态。 例如下图&#xff1a; 2. 多态的实现条件 Java中&#xff0c;多态的实现必须满足以下几个条件&#xff1a; 1. 必须在继承…

将mars3D导入自己的项目中

文章目录 一、打开自己的vite项目二、创建场景配置文件1.json文件路径 public\config\config.json2.创建组件定义文件路径 src\components\mars-work\mars-map.vue三、demo中引入四、必要样式 依赖文件 总结 一、打开自己的vite项目 我创建了一个新的 结构如下 二、创建场景…

Netty技术全解析:EventLoopGroup类详解

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

java学校--Object类方法--toString

第一点解析&#xff1a; 全类名就是包名加类名 getClass&#xff08;&#xff09;.getName()是得到其包名和类名如图&#xff0c;包名是com.hspedu.object_类名是Monster。 Integer.toHexString&#xff08;hashCode&#xff08;&#xff09;&#xff09;&#xff1b;是得到其…

Spring中@PostConstruct注解的使用

1.描述 1.1 背景 最近在做一个系统交互日志模块&#xff0c;要监控一个http请求&#xff0c;并记录请求与响应日志。项目中使用RestTemplate来发送http请求&#xff0c;所以打算给RestTemplate设置拦截器&#xff0c;来进行自定义操作。但是&#xff0c;只对当前类生效&#x…

Java文件IO操作知识点

关于文件 关于IO的定义 I:input输入 O:output输出,这是一套人为规定的规则,下面这个图方便我们理解输入输出的定义,统一以CPU为基准 在操作系统中其实把很多的资源都抽象成文件,我们在这里所说的文件就是"狭义"文件,平时保存在硬盘上的文件, 文件夹也是一种文件,我们…

「iOS」自定义cell与cell的复用

iOS学习 前言一&#xff1a;TableView协议二&#xff1a;cell的复用Cell的复用原理自定义cell总结 前言 UITableView是iOS开发中不可或缺的一部分&#xff0c;它是苹果iOS SDK提供的一种用于展示数据列表的视图控件。我们对其中的cell进行自定义&#xff0c;即可得到我们需要的…

Python 实现股票指标计算——BBI

BBI (Bull And Bear lndex) - 多空指标 1 公式 3日均价 3日收盘价之和 / 36日均价 6日收盘价之和 / 612日均价 12日收盘价之和 / 1224日均价 24日收盘价之和 / 24BBI (3日均价 6日均价 12日均价 24日均价) / 4 2 数据准备 我们以科创50指数 000688 为例&#xff0c…

Qt 学习第一天:安装VS和Qt

本人更换了一台新的电脑&#xff0c;使用联想电脑管家传输文件后没有安装VS&#xff0c;导致出现了以下问题&#xff1a; 疯狂查资料问人。弄了一个晚上加上午一个多小时之后&#xff0c;还是决定删掉原来的文件夹&#xff0c;重新下载一个 一、安装VS&#xff08;Visual Stud…

算法项目报告:物流中的最短路径问题

问题描述 物流问题 有一个物流公司需要从起点A到终点B进行货物运输&#xff0c;在运输过程中&#xff0c;该公司需要途径多个不同的城市&#xff0c;并且在每个城市中都有一个配送站点。为了最大程度地降低运输成本和时间&#xff0c;该公司需要确定经过哪些配送站点&#xff…

Android:requestLayout、invalidate 和 postInvalidate 的区别

提醒&#xff1a;下面源码来自SDK里Android-34版本 一、requestLayout 点击查看requestLayout官网文档 1.1 requestLayout方法源码 /*** Call this when something has changed which has invalidated the* layout of this view. This will schedule a layout pass of the v…

C++ :友元类

友元类的概念和使用 (1)将类A声明为B中的friend class后&#xff0c;则A中所有成员函数都成为类B的友元函数了 (2)代码实战&#xff1a;友元类的定义和使用友元类是单向的 (3)友元类是单向的&#xff0c;代码实战验证 互为友元类 (1)2个类可以互为友元类&#xff0c;代码实战…

【LeetCode】二叉树的最大深度

目录 一、题目二、解法完整代码 一、题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#x…

Leetcode2160. 拆分数位后四位数字的最小和:

问题描述&#xff1a; 给你一个四位 正 整数 num 。请你使用 num 中的 数位 &#xff0c;将 num 拆成两个新的整数 new1 和 new2 。new1 和 new2 中可以有 前导 0 &#xff0c;且 num 中 所有 数位都必须使用。 比方说&#xff0c;给你 num 2932 &#xff0c;你拥有的数位包括…