git中创建分支的本质是啥?的HEAD是什么?

git的分支的本质是啥呢? 就是在当前的最后一次的提交记录上,创建一个新的指针,将指针指向最后一次的提交记录的校验和.
好像是有点抽象,画一下.
head_1.jpg

上面的图解释了,分支和tag保存的皆是最后一次commit结果的指针.所以分支的创建就非常简单,只需要再创建一个新的指针,去指向最后一次的commit提交记录即可.
head_2.jpg

那么,问题来了,假如现在在master分支上,重新搞了一个分支,dev_test.可以知道dev_test分支指向的是基于master分支最后一次commit记录的指针.因为两个分支所指向的全是最后一次提交commit记录的指针,那么git如何知道你本地当前是在哪个分支上呢?
git中有一个名为 HEAD 的特殊指针。 请注意它和许多其它版本控制系统(如 Subversion 或 CVS)里的 HEAD 概念完全不同。 在 Git 中,它是一个指针,指向当前所在的本地分支(译注:将 HEAD 想象为当前分支的别名)。

HEAD是一个指向当前所在的本地分支.现在本地分支是master,则head指向的是master分支.
head_3.jpg

现象进行git checkout dev_test,那么head则指向的是dev_test分支.
head_4.jpg

这样的设计,会带来啥好处呢?

假如分支切换到dev_tese,进行了一次提交,那么会是这样子的
head_6.jpg

dev_test分支上commit,然后head指向的是当前分支,de v_test,
未命名 2.jpg

在checkOut时,一个是将head命令重新指回master分支,另外一个是将当前的工作区切换成master分支指向的快照内容.

由于git的分支切换,仅仅是指向所指对象校验和的文件,所以创建和销毁都十分高效.创建一个新的分支即就是往一个文件中写入 41 个字节(40 个字符和 1 个换行符),如此的简单能不快吗?

这与过去大多数版本控制系统形成了鲜明的对比,它们在创建分支时,将所有的项目文件都复制一遍,并保存到一个特定的目录。 完成这样繁琐的过程通常需要好几秒钟,有时甚至需要好几分钟。所需时间的长短,完全取决于项目的规模。 而在 Git 中,任何规模的项目都能在瞬间创建新分支。 同时,由于每次提交都会记录父对象,所以寻找恰当的合并基础(译注:即共同祖先)也是同样的简单和高效。 这些高效的特性使得 Git 鼓励开发人员频繁地创建和使用分支。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 5,286评论 0 7
  • 教程网址:http://www.liaoxuefeng.com/wiki/0013739516305929606d...
    maybenai阅读 3,971评论 0 1
  • 这篇博文是自己在学习git过程中的思考总结。本文仅仅代表个人的看法,如有不妥地方还请本文文末留言。 😊 原文链接g...
    Ming_Hu阅读 4,922评论 4 18
  • 彩云之南,风情大理,我总算来了。最开始知道大理,是通过黄渤主演的《心花怒放》,那时候知道了大理的存在,却没有那份情...
    枝秋阅读 4,134评论 0 2
  • 今天给大家介绍的电影 《毕竟是巫女》 —— 剧情介绍 在一个神社里,社长的女儿——师走,是一位个性要强、率性果敢的...
    星星乐园阅读 3,280评论 0 0

友情链接更多精彩内容