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
  

A 'tracking branch' in Git is a local branch that is connected to a remote branch. When you pull on that branch, it automatically pulls to the remote branch that it is connected with.


   跟踪分支是一种和远程分支有直接联系的本地分支
    
  当我们在跟踪分支上使用git pull命令,会自动从remote branch上fetch,然后在merge到该分支上
  如果我们想在跟踪分支上直接使用git push命令,让它自动push到对应的remote branch上
  还需要设置push的默认行为
  

git config push.default tracking



  当我们使用git clone命令后,会自动在本地建立一个master的分支来跟踪origin/master
   我们也可以使用
  

git checkout -b b1 origin/master


   或者
  

git checkout --track b1 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分支