Git分支——《Pro Git》

news/2025/1/13 23:05:29/

分支简介

分支的重要性

  • 作用:分支允许将工作从主开发线上分离,避免影响主线开发。
  • 传统版本控制的劣势:创建分支通常需要复制整个项目文件,效率低下。
  • Git 的优势:分支是 Git 的“必杀技特性”,创建和切换分支都非常轻量和高效,几乎瞬间完成。

Git 分支的核心概念

  1. 数据保存方式:Git 以 快照 而非文件差异保存数据。

    • 每次提交会创建一个提交对象(commit object),包含指向文件快照的指针、提交信息、作者信息,以及父对象的指针。
    • 这些对象包括:
      • Blob 对象:保存文件快照。
      • 树对象:保存目录结构。
      • 提交对象:指向树对象并保存提交信息。
  1. 分支本质:分支是一个指向提交对象的可变指针。
    • 默认分支名称为 master(可以修改)。
    • 每次提交时,分支指针会自动向前移动。
  1. HEAD 指针:指向当前所在的分支(将 HEAD 想象为当前分支的别名),动态决定工作目录的内容。
  1. 首次提交对象及其树结构:
    1. 做些修改后再次提交,那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。
  1. 提交对象及其父对象
    1. Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 master 分支会在每次提交时自动向前移动。
    2. Git 的 master 分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它,并且大多数人都懒得去改动它。

    3.  

Git 分支的高效操作

  1. 创建分支
    • 命令:git branch <branch_name>
    • 本质:创建一个指向当前提交对象的新指针,效率极高。
    • 示例:$ git branch testing
      • 这会在当前所在的提交对象上创建一个指针。
  1. 切换分支
    • 命令:git checkout <branch_name>
    • 行为:将 HEAD 指针指向目标分支,并切换工作目录内容。
    • 示例:$ git checkout testing
      • 这样 HEAD 就指向 testing 分支了。
      • 那么,这样的实现方式会给我们带来什么好处呢? 现在不妨再提交一次:
$ vim test.rb
$ git commit -a -m 'made a change'
      • 可以看到 HEAD 分支随着提交操作自动向前移动
      • 如图所示,你的 testing 分支向前移动了,但是 master 分支却没有,它仍然指向运行 git checkout 时所指的对象。 这就有意思了,现在我们切换回 master 分支看看:$ git checkout master
        • 检出时 HEAD 随之移动
        • 这条命令做了两件事。 一是使 HEAD 指回 master 分支,二是将工作目录恢复成 master 分支所指向的快照内容。 也就是说,你现在做修改的话,项目将始于一个较旧的版本。 本质上来讲,这就是忽略 testing 分支所做的修改,以便于向另一个方向进行开发。
        • 分支切换会改变你工作目录中的文件:在切换分支时,一定要注意你工作目录里的文件会被改变。 如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。 如果 Git 不能干净利落地完成这个任务,它将禁止切换分支。
      • 此时再稍微做些修改并提交:
$ vim test.rb
$ git commit -a -m 'made other changes'
      • 现在,这个项目的提交历史已经产生了分叉,因为刚才你创建了一个新分支,并切换过去进行了一些工作,随后又切换回 master 分支进行了另外一些工作。 上述两次改动针对的是不同分支:你可以在不同分支间不断地来回切换和工作,并在时机成熟时将它们合并起来。z
         
  1. 创建并切换分支
    • 命令:git checkout -b <branch_name>
    • 效率更高,推荐使用。

分支的灵活性与优势

  1. 独立开发
    • 可以从某个提交点分支出去,独立进行开发。
    • 不同分支之间的修改互不影响。
  1. 高效的分叉与合并
    • Git 的分支模型支持频繁创建和删除分支,而不会增加负担。
    • 每次提交记录父对象,便于快速找到合并基础。
  1. 分支历史查看
    • 使用 git log --oneline --decorate --graph --all 查看分支及分叉历史。


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

相关文章

10_Redis数据结构-HyperLogLog基数统计

1.HyperLogLog介绍 1.1 基本概念 Redis中的HyperLogLog是一种用于估算集合中不同元素数量(即基数)的概率数据结构。它特别适用于处理非常大的数据集,与传统的精确计数方法相比,HyperLogLog可以在消耗极少量内存的情况下提供相对准确的估计值。HyperLogLog是在Redis 2.8.9…

Centos集群同步文件脚本xsync

第一次使用需要安装rsync yum -y install rsync 创建执行文件 vi /usr/local/bin/xsync 执行权限 chmod ax /usr/local/bin/xsync #!/bin/bash# 获取输出参数&#xff0c;如果没有参数则直接返回 pcount$# if [ $pcount -eq 0 ] thenecho "no parameter find !";exit…

宝塔面板 php8.0 安装 fileinfo 拓展失败

系统&#xff1a;Albaba Cloud Linux release 3 &#xff08;OpenAnolis Editon&#xff09;即 Centos 平替 异常提示&#xff1a; cc: fatal error: ** signal terminated program cc1 compilation terminated. make: *** [Makefile:211: libmagic/apprentice.lo] Error 1搜…

C# 使用iText 编辑PDF

NetCore 创建、编辑PDF插入表格、图片、文字 NetCore 创建、编辑PDF插入表格、图片、文字(二) NetCore 创建、编辑PDF插入表格、图片、文字(三) 1&#xff0c;.net8 环境&#xff0c;引入 包 itext7 itext7.bouncy-castle-adapter 2,直接上代码 public class PDFEditor{public…

MySQL 16 章——变量、流程控制和游标

一、变量 在MySQL数据库的存储过程和存储函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据 在MySQL数据库中&#xff0c;变量分为系统变量和用户自定义变量 &#xff08;1&#xff09;系统变量 1.1.1系统变量分类 变量由…

同域名前后端分离项目 nginx配置实践

新项目采用前后端分离的方式开发&#xff0c;前后端代码打算分开部署&#xff08;同机器且同域名&#xff09;&#xff0c;但打算支持后端依然可访问静态资源&#xff08;nginx配置仅一份&#xff09;。 搜索nginx配置大部分都通过url前缀进行转发来做前后端分离&#xff0c;不…

Web开发中页面出现乱码的解决(Java Web学习笔记:需在编译时用 -encoding utf-8)

目录 1 引言2 乱码表现、原因分析及解决2.1 乱码表现2.2 原因分析2.3 解决 3 总结 1 引言 Web开发的页面出现了乱码&#xff0c;一直不愿写出来&#xff0c;因为网上的解决方案太多了。但本文的所说的页面乱码问题&#xff0c;则是与网上的大多数解决方案不一样&#xff0c;使…

《框架程序设计》复习题解析-2

目录 简答题 1.在MyBatis框架中&#xff0c;当查询结果列名和实体类中的属性名不一致时如何配置实现自定义映射关系&#xff0c;请详细说明。 2.请描述在SQL映射文件中&#xff0c;如何自定义合适的实体类与查询结果完成映射&#xff1f; 3.Spring整合MyBatis时&#xff0c;…