git 分支介绍
分支
分支是版本管理中的基本概念,简单理解就是从当前的提交路径中,分支出一个新的提交路径。原版本路径继续沿原来的迭代路径进行提交新内容,分支出来的提交路径按自己的节奏,提交新内容。成为一个新的仓库。
比如当你开发到一个阶段,需要添加一个新功能需求,但这个新功能可能引起已有功能的不稳定,那你就可以建立一个分支,在分支的基础上进行开发。这样一旦出了问题,并不会影响原主分支的内容。而开发完成之后,将分支合并到主分支。
git分支的不同之处
分支功能在传统的版本控制系统中是靠完全复制来实现的,而在git中,使用指针实现。故git创建、切换、删除分支超级快。
git分支原理
在理解git分支原理前,我们已经在01_git介绍了一些git的底层设计特点:
git保存的不是文件的变化或差异,而是一系列不同时刻的文件快照。
git暂存和提交的本质
暂存操作:给每个文件创建快照,给每个快照生成1个blob对象保存快照
提交操作:
- 根据文件的目录结构创建一个树对象,以同样方式指向blob对象。
- 然后创建一个提交对象,指向这个树对象。
多次提交形成提交对象的链式结构
- 提交对象还包含作者的姓名,邮箱等信息。
- 如果这不是第一次提交,提交对象还包含指向上次提交的指针。
- 随着时间的推移,多次提交形成提交对象的链式结构
git分支的本质
git 初始化时的master指针指代的就是提交对象形成的这条链的“主分支”。在使用版本回退时,实际上就是操作master的前后移动。
创建一个分支,就是创建一个类似master的新指针。
现在有了两个指针,那如何使这个链式结构分叉呢,这里有个HEAD特殊指针,HEAD指向哪里,当前的操作就提交到那个分支上。
当HEAD切换时,使两个不同的提交基于同一个父提交,那分支就产生了。
git创建分支的特点
git创建分支沿用了保存文件变化记录的优势,使得分支的创建和销毁异常高效。其他版本控制系统却是通过文件复制备份实现的分支,原始而低效。