概述
对于大项目而言,使用分支是不可避免的。GIT同样也提供了分支功能,但是GIT分支轻量,操作速度快。下面就对GIT分支内容进行的整理。
1、分支简介
之前我们整理过,GIT保存的是一些不同时刻的文件快照,而不是文件的变化和差异。
在进行提交操作(git commit)时,GIT会保存一个提交对象(commit object)。该提交对象会包含一个指向暂存内容快照的指针、作者的姓名和邮箱、提交时输入的信息、以及指向父对象的指针。首次提交对象没有父对象,普通提交对象由一个父对象,而多个分支合并产生的提交对象由多个父对象。
为了更加形象,我们举例说明,比如:有一个新建空GIT仓库,我们在这个仓库里添加了三个文件,分别是README、test.rb、LICENSE。我们使用git add进行暂存操作。暂存操作会为每一个文件计算校验和(SHA-1算法),然后会把当前版本的文件快照保存到GIT仓库中,最终将校验和加入到暂存区域等待提交。
$ git add README test.rb LICENSE
$ git commit -m 'The initial commit of my project'
当使用git commit 进行提交操作时,GIT会先计算每一个子目录的校验和,然后在GIT仓库中这些校验和保存为树对象。随后GIT便创建一个提交对象,它除了包含上面提到的信息外,还包含指向这个树对象的指针。如此一来,GIT就可以在需要的时候重现此次保存的快照。
现在,GIT仓库中有5个对象:3个文件的快照、一个树对象、以及一个提交对象。如下图所示:
如果对文件做一些修改然后提交,那么这次产生的提交对象会包含一个指向上次提交对象的指针,这个指针就是父指针。如下图: