Git中的branch
Git的branch和其他的版本控制系统的branch实现完全不一样
在CVS、SVN这样的传统VCS系统里:
一个branch实际上是是一个目录,里面包含了该branch的所有的文件
而Git中的branch只是一个指向某个commit对象的指针
创建一个新的branch实际上只是新建一个指针,如图:
正因为如此,git的branch操作才会很快
而branch的merge操作会以2个branch的共同的祖先(某次的commit)为基础,进行合并,所以速度也会很快
git中branch有三种类型:
1.local branch
本地分支,就是我们平常操作的分支,git中默认是master分支
可以通过git branch b1来建立本地分支,通过git checkout b1来切换分支
2.tracking branch
跟踪分支是一种和远程分支有直接联系的本地分支
当我们在跟踪分支上使用git pull命令,会自动从remote branch上fetch,然后在merge到该分支上
如果我们想在跟踪分支上直接使用git push命令,让它自动push到对应的remote branch上
还需要设置push的默认行为:
当我们使用git clone命令后,会自动在本地建立一个master的分支来跟踪origin/master
我们也可以使用
或者
命令来手工新建一个跟踪分支b1,并切换到该分支上
如果我们想把已经存在的一个分支b2转换成一个tracking branch,需要
git config branch.b2.remote origin
git config branch.b2.merge refs/heads/master
或者,我们手工修改~/.git/config文件
下面是一个tracking branch的配置信息
[branch "master"]
remote = origin
merge = refs/heads/master
3.remote branch
它实际上是指向远端服务器的某个分支,用来跟踪远程分支的变化
也即以前提到过的origin/master分支