接下来几章将学习git分支,但是在了解git分支之前,有必要先回顾下git是如何保存数据及数据的组成:
- git保存的不是文件的变化或差异,而是一系列不同时刻的快照;
- 在进行提交操作时,git会保存一个提交对象;
- 这个提交对象会包含一个指向暂存内容快照的指针,
- 这个提交对象还包含作者的姓名,邮箱、输入的注释,
- 这个提交对象还包含指向它的父对象的指针,
- 首次提交产生的提交对象没有父对象
- 普通提交的提交对象有一个父对象
- 由多个分支合并产生的提交对象有多个父对象
为了更好的理解git是如何保存数据的,假设现在有一个工作目录,里面包含了三个将要提交的文件。
- git会为每个文件计算校验和;
- git会把当前版本的文件快照保存到git仓库中(git使用blob对象保存它们),并将校验和加入到暂存区等待提交;
- 当进行提交操作时,git会先计算每个子目录的校验和,然后在git仓库中将这些校验和保存为树对象;
- git创建一个提交对象,除了包含以上提到的信息,还会包含指向这个树对象的指针。
至此,git仓库中总共有五个对象,分别是:三个blob对象(保存文件快照)、一个树对象(记录目录结构和blob对象索引)、一个提交对象(包含指向前述对象的指针及所有提交信息)。
当对文件做了修改后再提交,那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。
git的分支,其本质仅仅是指向提交对象的可变指针。git的默认分支名称是master
。在多次提交后,我们其实已经有一个指向最后那个提交对象的master
分支了。master
分支会在每次提交时自动向前移动。