上一节介绍了git管理的文件状态,本节将介绍git版本控制的核心利器-分支(branch)。
第一节的内容讲了三种git管理的对象,可以知道只要知道一个commit对象的信息,我们就可以知道这个版本的内容。我们进行版本控制,也就是要管理这些commit对象。git使用分支这个概念来对commit进行管理,分支其实就是指向了某一个commit,一个分支来索引一个commit。
还是从.git文件夹出发,初始化一个本地仓库,看看.git下的目录:
objects保存了我们所有的对象,refs的文件夹全称references,这个文件夹里有会储存三类文件:本地分支、远程分支、tag。
现在看看refs文件夹的内容:
1.本地分支
heads文件夹里面的内容是本地分支文件。tags文件夹里的文件也是标识一个commit,不过对这个commit进行了一些包装,取了一个更好的名字而已。这里如果关联了远程仓库,refs还存在一个remotes文件夹,用来储存远程分支
本地仓库初始化之后,heads文件夹为空,也就是目前没有分支,但是我们提交一个commit之后,git将建立一个默认的名为master的分支。现在随意往仓库加一个文件,使用git add将文件加入暂存区(对于暂存区,下一节将详细讲解),然后使用 git commit将文件提交(git commit -m "first commit" -m参数可以对本次commit加上一个注释)。
现在看看refs/heads目录:里面多了一个名为master的文件。
这个master文件,就是我们的分支文件,他可以直接用文本打开,我们可以看看里面的内容:
在使用git log 看看我们的commit日志:
这个分支文件,指向了当前的commit,可以看到创建一个分支的成本很低,一个文本文件,里面标识一个commit的key就完成了,git使用分支来管理版本的成本的花费是很低的,新建一个分支的消耗几乎不存在。
使用git branch 可以查看本地所有分支,git branch [分支名] 可以创建一个分支,每创建一个分支heads文件夹就会多一个文件
可以看到一开始只有一个master分支,然后建立一个名为develop的分支,分支前面的 * 号,表示目前所在的分支。目前版本的内容还是master分支,git branch只是新建了一个分支,并没有切换到新的分支,新建的分支文件里的内容,就是当前所在分支指向的commit。
git何如知道目前版本工作的分支是哪一个呢?我们需要看看.git目录下的HEAD文件,这个文件记录了当前版本所在的分支,这个文件也可以直接用文本打开:
git 通过这个文件来标识当前工作的分支。
git checkout [分支名] 可以在分支之间切换,通过分支的切换,