- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Git 何谓分支
Git 何谓分⽀
为了理解 Git 分支的实现方式 ,我们需要回顾一下 Git 是如何储存数据
的 或许你还记得第一章的内容 ,Git 保存的不是文件差异或者变化量 ,而
只是一系列文件快照
在 Git 中提交时 ,会保存一个提交 (commit )对象 ,该对象包含一个指向
暂存内容快照的指针 ,包含本次提交的作者等相关附属信息 ,包含零个或
多个指向该提交对象的父对象指针 :首次提交是没有直接祖先的 ,普通提
交有一个祖先 ,由两个或多个分支合并产生的提交则有多个祖先
为直观起见 ,我们假设在工作目录中有三个文件 ,准备将它们暂存后提
交 暂存操作会对每一个文件计算校验和 (即第一章中提到的 SHA-1 哈希
字串 ),然后把当前版本的文件快照保存到 Git 仓库中 (Git 使用 blob 类
型的对象存储这些快照 ),并将校验和加入暂存区域 :
$ git add README test.rb LICENSE
$ git commit -m initial commit of my roject
当使用 git commit 新建一个提交对象前 ,Git 会先计算每一个子目录 (本
例中就是项目根目录 )的校验和 ,然后在 Git 仓库中将这些目录保存为树
(tree )对象 之后 Git 创建的提交对象 ,除了包含相关提交信息以外 ,
还包含着指向这个树对象 (项目根目录 )的指针 ,如此它就可以在将来需
要的时候 ,重现此次快照的内容了
现在 ,Git 仓库中有五个对象 :三个表示文件快照内容的 blob 对象 ;一个
记录着目录树内容及其中各个文件对应 blob 对象索引的 tree 对象 ;以及
一个包含指向 tree 对象 (根目录 )的索引和其他提交信息元数据的
commit 对象 概念上来说 ,仓库中的各个对象保存的数据和相互关系看
起来如图 3-1 所示 :
图 3-1. 单个提交对象在仓库中的数据结构
作些修改后再次提交 ,那么这次的提交对象会包含一个指向上次提交对象
的指针 (译注 :即下图中的 parent 对象 ) 两次提交后 ,仓库历史会变
成图 3-2 的样子 :
图 3-2. 多个提交对象之间的链接关系
现在来谈分支 Git 中的分支 ,其实本质上仅仅是个指向 commit 对象的
可变指针 Git 会使用 master 作为分支的默认名字 在若干次提交后 ,你
其实已经有了一个指向最后一次提交对象的 master 分支 ,它在每次提交
的时候都会自动向前移动
图 3-3. 分支其实就是从某个提交对象往回看的历史
那么 ,Git 又是如何创建一个新的分支的呢 ?答案很简单 ,创建一个新的分
支指针 比如新建一个 testing 分支 ,可以使用 git branch 命令 :
$ git branch testing
这会在当前 commit 对象上新建一个分支指针 (见图 3-4 )
图 3-4. 多个分支指向提交数据的历史
那么 ,Git 是如何知道你当前在哪个分支上工作的呢 ?其实答案也很简单 ,
它保存着一个名为 HEAD 的特别指针 请注意它和你熟知的许多其他版本
控制系统 (比如 Subversion 或 CVS )里的 HEAD 概念大不相同 在 Git
中 ,它是一个指向你正在工作中的本地分支的指针 (译注 :将 HEAD 想象
为当前分支的别名 ) 运行 git branch 命令 ,仅仅是建立了一个新的分
支 ,但不会自动切换到这个分支中去 ,所以在这个例子中 ,我们依然还在
master 分支里工作 (参考图 3-5 )
图 3-5. HEAD 指向当前所在的分支
要切换到其他分支 ,可以执行 git checkout 命令 我们现在转换到新建的
testing 分支 :
$ git checkout testing
这样 HEAD 就指向了 testing 分支 (见图3-6 )
图 3-6. HEAD 在你转换分支时指向新的分支
这样的实现方式会给我们带来什么好处呢 ?好吧 ,现在不妨再提交一次 :
$ vim test.rb
$ git commit -a -m made a change
图 3-7 展示了提交后的结果
图 3-7. 每次提交后 HEAD 随着分支一起向前移动
非常有趣 ,现在 testing 分支向前移动了一格 ,而 master 分支仍然指向
原先 git checkout 时所在的 commit 对象 现在我们回到 m
您可能关注的文档
- Fe_2_UV催化臭氧法降解腈纶废水_于忠臣.pdf
- Fe—C—Mn合金贝氏体相变驱动力.pdf
- FFT变换相关公式、IFFT变换(FFT逆变换).docx
- Fe_81_Ga_19_磁致伸缩合金的动态机电耦合系数.pdf
- F8-DCS分散控制系统.pdf
- Flash Media Server概述之七(文档来源Adobetop论坛).pdf
- FMO理论对周环反应的几点解释.pdf
- fortran常用函数表.doc
- FPGA_ASIC-时变MIMO信道容量的估算.pdf
- Fortran 上机题汇总.docx
- 广济大药房中药调剂中的问题及对策分析.doc
- 共享农场盈利模式研究.docx
- 多米诺教育科技有限公司绩效考核问题及对策研究.doc
- 驻马店市第二初级中学2022-2023学年七年级下学期4月期中数学试题【带答案】.docx
- 电影售票系统的设计与实现 .doc
- 驻马店市第二初级中学2022-2023学年七年级下学期3月月考数学试题【带答案】.docx
- 驻马店市确山县2022-2023学年七年级下学期期中道德与法治试题【带答案】.docx
- 概预算编制质量对工程造价的影响及对策研究.docx
- 驻马店市西平县2022-2023学年七年级上学期期末语文试题.docx
- 驻马店市西平县2022-2023学年七年级上学期期末英语试题.docx
最近下载
- AIAG 产品质量先期策划 第三版 _APQP (3rd edition) 纯中文版.pdf
- 垂直电梯的基础知识培训.ppt
- 管理学(北师大)中国大学MOOC慕课 章节测验 客观题答案.docx
- 4-技术中心职能.pdf VIP
- 永磁同步电动机电磁计算程序.xls
- 【茅庐学堂精选干货】63页PPT详解六个盒子组织诊断工具(附流程及关键点).pdf VIP
- 精品解析:浙江省绍兴市越城区2023-2024学年九年级上学期期末道德与法治试题(解析版).pdf VIP
- BCP计划(应急计划).doc
- 2023-2024年卫生管理(副高)考试高频题库(历年考点版)带答案解析.docx VIP
- 人教版初三化学各单元测试题及答案【精全册12套】.pdf VIP
文档评论(0)