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