深入Git开发(Git分支管理和操作详细介绍)

上一章Git教程请查看:Git标签tag操作和补丁patch操作
分支操作允许创建另一条开发分支,我们可以使用这个操作将开发过程分成两个不同的方向。例如我们发布了一个6.0版本的产品,我们可能想要创建一个分支,这样7.0功能的开发就可以与6.0版本的bug修复分开。
1、创建分支userA使用git branch < 分支名称> 命令创建一个新分支,我们可以从现有的分支创建一个新分支,我们可以使用特定的提交或标记作为起点,如果没有提供任何特定的提交ID,那么将以HEAD作为起点创建分支。

$ git branch new_branch$ git branch * master new_branch

以上命令创建了一个新的分支,userA使用git branch命令列出可用的分支,git在当前工作分支之前显示星号标记。
创建分支操作的图示如下所示:
深入Git开发(Git分支管理和操作详细介绍)

文章图片
深入Git开发(Git分支管理和操作详细介绍)

文章图片
2、切换分支userB使用git签出命令在分支之间进行切换。
$ git checkout new_branch$ git branch master * new_branch

3、创建和切换分支的快捷方式在上面的例子中我们分别使用了两个命令来创建和切换分支,git通过checkout命令提供-b选项,该操作创建一个新分支,并立即切换到新分支。
$ git checkout -b test_branch$ git branch master new_branch * test_branch

4、删除一个分支可以通过git分支命令提供-D选项来删除分支,但是在删除现有的分支之前,请切换到另一个分支。
userB目前在test_branch上,如果想删除那个分支,可以切换分支并删除分支如下所示。
$ git branch master new_branch * test_branch$ git checkout master$ git branch -D test_branch

5、重命名一个分支userB决定在他的字符串操作项目中添加对宽字符的支持,他已经创建了一个新的分支,但是分支名称不合适,因此他可以使用-m选项更改了分支名称,然后是旧的分支名称和新分支名称。
$ git branch * master new_branch$ git branch -m new_branch wchar_support

6、合并两个分支userB实现了一个函数来返回宽字符串的字符串长度,新代码如下所示:
$ git branch master * wchar_support$ pwd /home/repo/project/src$ git diff

测试之后他提交更改并将其推到新的分支。
$ git status -s M string_operations.c ?? string_operations$ git add string_operations.c$ git commit -m "添加w_strlen函数来返回wchar_t字符串的长度"

请注意userB正在将这些更改推入新的分支,这就是为什么他使用分支名称wchar_support而不是主分支。
$ git push origin wchar_support

在作出这些改变之后,新的分支将如下所示
深入Git开发(Git分支管理和操作详细介绍)

文章图片
userA很好奇userB在他的私有分支中做什么,他从wchar_support分支检查日志。
$ pwd /home/repo/project/src$ git log origin/wchar_support -2

通过查看提交消息,userA意识到userB为宽字符实现了strlen函数,他希望主分支也具有相同的功能。他没有重新实现,而是决定采用UserB的代码,将他的分支与主分支合并。
$ git branch * master$ pwd /home/repo/project$ git merge origin/wchar_support

合并操作之后,主分支将如下图所示:
深入Git开发(Git分支管理和操作详细介绍)

文章图片
现在分支wchar_support已经与主分支合并,我们可以通过查看提交消息或查看对string_action .c文件所做的修改来验证它。
$ cd src/$ git log -1$ head -12 string_operations.c

测试之后即可将代码更改推给主分支。
$ git push origin master

7、git rebase分支命令Git rebase命令是一个分支合并命令,但不同之处在于它修改了提交的顺序。
Git merge命令尝试将来自其他分支的提交放到当前本地分支的头部,例如本地分支提交了A?> B?> C?> D,而合并分支提交了A?> B?> X?> Y,那么git合并将把当前本地分支转换为类似于A?> B?> C?> D?> X?> Y。
【深入Git开发(Git分支管理和操作详细介绍)】Git rebase命令尝试找出当前本地分支和合并分支之间的公共祖先,然后通过修改当前本地分支中的提交顺序,将提交推到本地分支。例如如果本地分支提交了A?> B?> C?> D,而合并分支提交了A?> B?> X?> Y,那么Git rebase将当前本地分支转换为类似于A?> B?> X?> Y?> C?> D。当多个开发人员处理单个远程存储库时,你不能修改远程存储库中的提交顺序。在这种情况下,你可以使用rebase操作将本地提交置于远程存储库提交之上,并可以推动这些更改。

    推荐阅读