Git使用学习(十七、Git的分支管理机制)
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 它会在每次的提交操作中自动向前移动。
注:Git 的 “master” 分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它,并且大多数人都懒得去改动它。
下图表示我们在默认的master分支进行三次提交后的状态。HEAD指针和master指针,都指向最新的提交。
假设我们通过下面命令创建了一个testing分支
$ git branch testing
对于git来说,分支的创建很简答,就是创建了一个指针。
注:对于svn,创建分支需要重新拷贝一份文件和目录,git只是创建一个指针。
当然对于新创建的testing分支这个指针,HEAD指针还是指向之前创建testing分支的master分支。
说到这里,使用下面命令切换分支就很简单了。
$ git checkout testing
只需要HEAD指针,指向testing分支这个指针就可实现分支的切换。
假设我们在testing分支上创建,并提交一个文件
$ vim test.rb
$ git commit -a -m 'made a change'
可以看到对比上一个版本,增加了一个87ab2这个版本
此时testing 分支向前移动了,但是 master 分支却没有,它仍然指向运行 git checkout 时所指的对象。 这就有意思了,现在我们切换回 master 分支看看:
$ git checkout master
可以看到,切换到master分支只是移动了一下HEAD指针。
这条命令做了两件事。 一是使 HEAD 指回 master 分支,二是将工作目录恢复成 master 分支所指向的快照内容。也就是说,你现在做修改的话,项目将始于一个较旧的版本。 本质上来讲,这就是忽略 testing 分支所做的修改,以便于向另一个方向进行开发。
注意:分支切换会改变你工作目录中的文件。在切换分支时,一定要注意你工作目录里的文件会被改变。 如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。所以一定要记得切换分支前,提交工作目录的内容。
我们现在处于master分支上,接下来我们使用master分支在做一次提交。
$ vim test.rb
$ git commit -a -m 'made other changes'
此时的情况和前面不一样了,此时出现了真正的分叉。
这里我们其实已经懂得了分支切换了。
这个是和我们打算把testing分支合并到master分支上。
当然,可能会出现合并冲突,这个就需要我们解决了。总之解决后会完成这次合并。