Git之分支
这是一篇我理解的分支模型,如有疏漏还请指出。
分支简介
我们使用Git的时候,经常会遇到很多额外的工作,为了不影响自己现在正在做的主线的工作,我们需要为这项额外的工作分配一个额外的工作空间,这个工作空间就是一个分支,在这个空间内,我们可以独立的进行自己的工作,当任务完成后,可以将分支与主线合并,自己的工作也就会在主线中呈现。
分支创建
假设我们有一个正在进行的工作如图1所示。

图1
我们创建了一个新的分支的时候,其实是创建了一个新的指针。使用git branch来创建分支:
$ git branch testing
这会在当前所在的提交对象上创建一个指针。

图2
与此同时,Git还提供了一个特殊指针HEAD指针,它指向当前所在的本地分支,即它总是指向你现在所在的分支。而直到目前为止,我们的HEAD指针还在master分支上。因为git branch命令仅仅创建一个新分支,并不会自动切换到新的分支中去。

图3
分支切换
要切换到一个已存在的分支,需要使用git checkout命令。在本例中,现在需要切换到新创建的testing分支中去:
$ git checkout testing
这样HEAD指针就指向testing分支了。

图4
这个时候如果再提交一次,会得到下列的结果:
$ vi test.md
$ git commit -a -m 'change content'
如图所示,我们的testing分支向前移动了,但是master分支却没有。

图5
如果想要切换回master,只需要下面的命令:
$ git checkout master

图6
上述命令在将HEAD指针指向master的同时,也忽略了testing分支所做出的修改,也就是说,目前指针指向了一个“老版本”,如果现在进行进一步的修改,也将会是基于老版本的一个修改,对于testing分支不会产生任何影响。
我们继续修改我们的工程:
$ vi test.md
$ git commit -a -m 'another change'
如图所示,此工程已经产生了分叉。

图7
现在,我们就可以在不同分支上来回切换和工作,只需要使用branch、checkout、commit这三个命令。通过使用git log命令简单查看分叉历史。