首页 > 其他分享 >Git分支管理基本原理

Git分支管理基本原理

时间:2024-07-19 16:29:34浏览次数:8  
标签:git 基本原理 feature Git 提交 创建 main 分支

原文全文详见个人博客:

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开发者乐园】,大佬免费指导:点击加入  

标签:git,基本原理,feature,Git,提交,创建,main,分支
From: https://blog.csdn.net/CoderCoding/article/details/140552612

相关文章

  • github+hexo
    Hexo搭建步骤安装gitgit--version用于验证安装结果安装node.js需要安装node.js和里面的工具npm官网下载node.js稳定版或者最新版本,一路默认完整安装后,cmd敲node-v和npm-v验证安装结果使用国内镜像源npmconfigsetregistryhttps://registry.npm.taobao.or......
  • Windows平台如何使用Gitblit搭建Git服务器
    软件:Java:1.8gitblit:本文使用版本1.9.3,是官网的最新版。下载后,直接解压无须安装。官网地址:http://www.gitblit.com/gitlit配置:1、创建用于存储资料的文件夹(E:\git\Repository)2、找到Gitblit目录下的data文件下的 default.properties 文件,用“记事本”或文本编......
  • Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)
    创建一个Springboot项目,勾选web将该项目创建git本地仓库,再创建远程仓库推送上去创建TestController@RestController@RequestMapping("/test")publicclassTestController{    @GetMapping("/hello")    publicStringsayHelloJenkins(){        ret......
  • Git基础使用
    目录git的安装初始化配置新建仓库工作区域与文件状态 添加与提交文件回退版本对比差异删除文件忽略文件 ssh配置 关联本地仓库与远程仓库分支简介与基本操作解决合并冲突 结语 Git是一个开源的分布式版本控制系统,由LinusTorvalds创建,用于有效、高速地处......
  • GitHub每日最火火火项目(7.17)
    项目名称:aider项目介绍:aider是一个在终端中实现AI结对编程的项目。它能够为开发者提供智能的编程辅助,帮助开发者更高效地完成编程任务。通过与AI的协作,开发者可以获得实时的代码建议、错误修复提示等,从而提高编程效率和质量。项目地址:https://github.com/paul-gauthi......
  • JavaSE--分支、循环结构
    流程控制语句    流程控制语句就是在Java中用来设置Java代码如何运行及运行顺序的。    分类:    顺序结构【默认结构】    分支结构【选择结构】    循环结构【重复结构】顺序结构    顺序结构是Java程序中用来设置Java......
  • gitee入门_如何上传文件
    前提条件:1,已经安装完git相关环境2,在gitee上已经创建完仓库1,初始化本地仓库在本地新建一个文件夹,点击鼠标右键,选择gitbash在打开后输入代码:gitinit2,同步文件打开gitee,选择自己的仓库,复制输入:gitremoteaddorigin此处粘贴然后再执行上述图片中的第二步第三步......
  • idea开发工具配置git,连接到gitee远程仓库
    1.打开idea,Settings里找到如下位置,正常idea会自动找到git,test测试,显示版本号说明正常 2.创建本地Git仓库,默认就是当前项目路径,不要修改,直接创建 3.创建后自动识别出待提交的文件,输入说明,提交,提交后让输入git名称和邮箱,设置并提交,提交成功。我这个项目是前后端都放一起了......
  • 参加歌手比赛,运用Java实现是否需要进入决赛(运用if-else多分支结构)
    importjava.util.Scanner;publicclassanli{publicstaticvoidmain(String[]args){//思路分析//1.创建Scanner对象,接收用户输入//2.接收成绩保存到doublescore//3.使用if-else判断,如果初赛成绩大于8.0进入决赛,否则提示淘汰//4.如果进入到决赛,再接收ch......
  • 运用Java语言实现保国同志信用分的情况(使用if-else多分支语句)
    importjava.util.Scanner;publicclassnali{publicstaticvoidmain(String[]args){/*输入保国同志的芝麻信用分:如果:信誉分为100分时,输入信用极好;信誉分为(80,99】时,输入信用优秀;信誉分为【60,80】时,输入信用一般;其他情况,输入信用不及格......