Git分支管理基本原理

news2024/9/23 15:22:04

原文全文详见个人博客:

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.coloradmin.cn/o/1938306.html

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

相关文章

Git仓库拆分和Merge

1. 问题背景 我们原先有一个项目叫open-api&#xff0c;后来想要做租户独立发展&#xff0c;每个租户独立成一个项目&#xff0c;比如租户akc独立部署一个akc-open-api&#xff0c;租户yhd独立部署一个yhd-open-api&#xff0c;其中大部分代码是相同的&#xff0c;少量租户定制…

鸿蒙开发入门——声明式UI开发入门简介(1)

声明式UI特点 与常规命令式开发的区别在于主导者不同&#xff0c;命令式开发为开发者告诉计算机需要做什么&#xff0c;而声明式开发为开发者告诉计算机自己想要什么结果&#xff0c;怎么做交给预先的程序和算法&#xff0c;让计算机自行推断 声明式描述 开发者只需描述在界⾯…

《0基础》学习Python——第二十讲__网路爬虫/<3>

一、用post请求爬取网页 同样与上一节课的get强求的内容差不多&#xff0c;即将requests.get(url,headershead)代码更换成requests.post(url,headershead),其余的即打印获取的内容&#xff0c;如果content-typejson类型的&#xff0c;打印上述代码的请求&#xff0c;则用一个命…

代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;自从SDXL提出了长宽桶技术之后&#xff0c;彻底解决了不同长宽比的图像输入问题&#xff0c;现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Rat…

如何根据同一行的ID利用R语言对值进行求和

需求&#xff1a;将属于同一分组的对应的值进行求和或者求平均值 #设置工作目录 > getwd() [1] "C:/Users/86150/Documents" > setwd("C:/Users/86150/Desktop/AA2024/RUF") > list.files() #读取文件 >install.packages("readxl")…

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日&#xff0c;经欧拉生态创新中心和华为技术有限公司测评&#xff0c;建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统&#xff0c;完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920&#xff08;Taisha 200&#xff09;的兼容性…

SVM 技能测试:25 个 MCQ 用于测试数据科学家的 SVM

SVM 技能测试:25 个 MCQ 用于测试数据科学家的 SVM(2024 年更新) 一、介绍 你可以把机器学习算法想象成一个装满斧头、剑和刀片的军械库。你有各种各样的工具,但你应该学会在正确的时间使用它们。打个比方,将“线性回归或逻辑回归”视为一把能够有效地切片和切块数据但…

uniapp vue3 上传视频组件封装

首先创建一个 components 文件在里面进行组件的创建 下面是 vvideo组件的封装 也就是图片上传组件 只是我的命名是随便起的 <template><!-- 上传视频 --><view class"up-page"><!--视频--><view class"show-box" v-for"…

纯硬件一键开关机电路的工作原理

这是一个一键开关机电路: 当按一下按键然后松开&#xff0c;MOS管导通&#xff0c;VOUT等于电源电压; 当再次按一下按键然后松开&#xff0c;MOS管关闭&#xff0c;VOUT等于0; 下面来分析一下这个电路的工作原理。上电后&#xff0c;输入电压通过R1和R2给电容充电&#xff0c;最…

MySQL通过bin-log恢复数据

MySQL通过bin-log恢复数据 1.bin-log说明2.数据恢复流程2.1 查看是否开启bin-log2.3 查看bin-log2.4 执行数据恢复操作2.5 检查数据是否恢复 1.bin-log说明 mysqldump和bin-log都可以作为MySQL数据库备份的方式&#xff1a; mysqldump 用于将整个或部分数据库导出为可执行的S…

TeraTerm 使用技巧

参考资料 自分がよく使うTeratermマクロによる自動ログインのやり方をまとめてみたよTera Term マクロでログインを自動化してみたTera Term のススメ 目录 简介一. 常用基础设置1.1 语言变更1.2 log设置 二. 小技巧2.1 指定host别名2.2 新开窗口2.3 设置粘贴多行命令时的行间…

【3D编程技巧】如何用四元数旋转矢量在相机空间进行光照计算

这里介绍一个小TIPS&#xff0c;很久没有这么有成就感了。我以前在学3D数学的时候&#xff0c;书上就有一句话&#xff0c;说你把矢量这些东西用久了&#xff0c;就应该形成一种“直觉”&#xff0c;仿佛这些东西就是你的左右手一样。而这次&#xff0c;我居然真的用“直觉”来…

基于上下文自适应可变长熵编码 CAVLC 原理详细分析

CAVLC CAVLC&#xff0c;即Context-Adaptive Variable-Length Coding&#xff0c;是一种用于视频压缩的编码技术&#xff0c;特别是在MPEG-4视频编码标准中使用。CAVLC是一种熵编码方法&#xff0c;它根据视频数据的上下文信息来调整编码长度&#xff0c;以实现更有效的数据压…

【从0到1,训练大模型,从llama3开始】

摘要: 随着大模型越来越多,大家肯定眼花缭乱。不知道选择哪个好,换句话说,不知道哪个才适合自己。 通过社长的实操:chatgpt3.5、gpt4、gpt4o、llama3、通义千问、豆包等大模型,总结是:大家都很好,都能一定程度上的帮助你。 不过怎么说呢,他们什么都懂,但是,什么都不…

sourcetree中常用功能使用方法及gitlab冲突解决

添加至缓存&#xff1a;等于git add 提交&#xff1a;等于git commit 拉取/获取&#xff1a;等于git pull ,在每次要新增代码或者提交代码前需要先拉取一遍服务器中最新的代码&#xff0c;防止服务器有其他人更新了代码&#xff0c;但我们自己本地的代码在我们更新前跟服务器不…

邮件安全篇:企业电子邮件安全涉及哪些方面?

1. 邮件安全概述 企业邮件安全涉及多个方面&#xff0c;旨在保护电子邮件通信的机密性、完整性和可用性&#xff0c;防止数据泄露、欺诈、滥用及其他安全威胁。本文从身份验证与防伪、数据加密、反垃圾邮件和反恶意软件防护、邮件内容过滤与审计、访问控制与权限管理、邮件存储…

面试题 17.14.最小K个数

题目&#xff1a;如下图 答案&#xff1a;如下图 /*** Note: The returned array must be malloced, assume caller calls free().*/ void AdjustDown(int* a,int n,int root) {int parent root;int child parent * 2 1;//默认左孩子是大的&#xff0c;将其与右孩子比较&am…

《机器学习》读书笔记:总结“第5章 神经网络”中的概念

&#x1f4a0;神经网络&#xff08;neural network&#xff09; 神经网络是由具有适应性的简单单元组成的广泛并行互联的网络&#xff0c;它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。 神经网络中最基本的成分是 神经元(neuron / unit)&#xff0c;即上述定…

机械臂泡水维修|机器人雨后进水维修措施

如果机器人不慎被水淹&#xff0c;别慌&#xff01;我们为你准备了一份紧急的机械臂泡水维修抢修指南&#xff0c;帮助你解决这个问题。 【机器人浸水被淹后紧急维修抢修&#xff5c;如何处理&#xff1f;】 机械臂被淹进水后维修处理方式 1. 机械手淹水后断电断网 首先&am…

Hive分布式SQL计算平台

Hive分布式SQL计算平台 一、Hive 概述二、Hive架构三、Hive客户端 1、Hive有哪些客户端可以使用2、Hive第三方客户端 四、Hive使用语法 1、数据库操作2、内部表&#xff0c;外部表3、数据的导入与导出4、分区表5、分桶表6、复杂类型操作7、数据抽样8、Virtual Columns 虚拟列9…