18.4 基于特性分支的开发
有了前面“代码管理之殇”的铺垫,在领受任务之后,开发者user1和user2应该为自己负责的功能创建特性分支。
18.4.1 创建分支user1/getopt
开发者user1负责用getopt进行命令行解析的功能,因为这个功能用到getopt函数,于是将这个分支命名为user1/getopt。开发者user1使用git branch命令创建该特性分支,具体操作过程如下。
(1)确保是在开发者user1的工作区中。
$cd/path/to/user1/workspace/hello-world/
(2)开发者user1基于当前HEAD创建分支user1/getopt。
$git branch user1/getopt
(3)使用git branch创建分支,并不会自动切换。查看当前分支可以看到仍然工作在master分支(用星号“*”标识)中。
$git branch
*master
user1/getopt
(4)执行git checkout命令切换到新分支上。
$git checkout user1/getopt
Switched to branch'user1/getopt'
(5)再次查看分支列表,当前工作分支的标记符(星号)已经落在user1/getopt分支上。
$git branch
master
*user1/getopt
分支实际上是创建在目录.git/refs/heads下的引用,版本库初始时创建的master分支就是在该目录下。在第2篇“第7章Git重置”的章节中,已经介绍过master分支的实现,实际上这也是所有分支的实现方式。
查看一下.git/refs/heads目录下的引用。可以在该目录下看到master文件,和一个user1目录。而在user1目录下是文件getopt。
$ls-F.git/refs/heads/
master user1/
$ls-F.git/refs/heads/user1/
getopt
引用文件.git/refs/heads/user1/getopt记录的是一个提交ID。
$cat.git/refs/heads/user1/getopt
ebcf6d6b06545331df156687ca2940800a3c599d
因为分支user1/getopt是基于头指针HEAD创建的,因此当前该分支和master分支的指向是一致的。
$cat.git/refs/heads/master
ebcf6d6b06545331df156687ca2940800a3c599d
当前的工作分支为user1/getopt,记录在头指针文件.git/HEAD中。
切换分支命令git checkout对文件.git/HEAD的内容进行更新。可以参照第2篇“第8章 Git检出”的相关章节。
$cat.git/HEAD
ref:refs/heads/user1/getopt