分支的简介
本文讨论的命令
- git branch
- git checkout
创建一个仓库,得到 master 分支
当你创建一个 git 仓库的时候,势必会有一个分支自动生成,因为你必定要工作在某个分支上。这个分支就是 master,一般来说所有的仓库都是以 master 分支作为主分支,它总是保持稳定的,用来部署在开发环境。
新建一个仓库:
$ git init
$ echo This is the README file. > README
$ git add README
$ git commit -m "init"
$ git branch
* master
上面的信息告诉我:
- 现在只有一个分支 master。
- master 就是当前 HEAD 所指向的分支。
仓库的提交信息如下图所示:
之前提到过,HEAD 的指向实际上就是当前正在指向的分支。这个情况下,HEAD 指向的是 master 分支:
$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
35ede5c916f88d8ba5a9dd6afd69fcaf773f70ed
上面的例子里面,HEAD 这个文件的内容引用了 refs/heads/master。这个文件的内容就是 master 分支最近一个提交的哈希值。
现在我们再做一次提交:
$ echo One more line. >> README
$ git commit -a -m "Added a second line."
现在仓库里面就有两个提交 C1 和 C2 了。master 分支和 HEAD 都指向 C2:
新建分支/切换分支
/**
* 创建分支
*/
$ git branch test
$ git branch
* master
test
/**
* 切换分支
*/
$ git checkout test
Switched to branch 'test'
$ git branch
master
* test
/**
* 在 test 分支上工作
*/
$ echo My system test > plan
$ git add plan
$ git commit -m "Add plan file"
$ ls
plan README
现在的仓库就如下图这样:
如果我们想回到 master 分支:
$ git checkout master
其结果就是 HEAD 的指向会移动到 master 上面:
实际上切换分支之后不仅仅是 HEAD 的指向改变了,工作区和暂存区也变了。在 test 分支里面的 plan 文件在 master 分支上是没有的。因此切换完分支之后,工作区和暂存区上都没有了 plan 文件的踪迹:
$ ls
README
$ git ls-files
README