分支的简介

本文讨论的命令

  • 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 所指向的分支。

仓库的提交信息如下图所示: 1

之前提到过,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."

现在仓库里面就有两个提交 C1C2 了。master 分支和 HEAD 都指向 C2:

2

新建分支/切换分支

/**
 * 创建分支
 */
$ 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

现在的仓库就如下图这样:

3

如果我们想回到 master 分支:

$ git checkout master

其结果就是 HEAD 的指向会移动到 master 上面:

4

实际上切换分支之后不仅仅是 HEAD 的指向改变了,工作区和暂存区也变了。在 test 分支里面的 plan 文件在 master 分支上是没有的。因此切换完分支之后,工作区和暂存区上都没有了 plan 文件的踪迹:

$ ls
README
$ git ls-files
README

results matching ""

    No results matching ""