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

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

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

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

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

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

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

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