个性化阅读
专注于IT技术分析

深入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在当前工作分支之前显示星号标记。

创建分支操作的图示如下所示:

branch create创建分支之前
branch create创建分支之后

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 

在作出这些改变之后,新的分支将如下所示

在新分支中提交之后

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

合并操作之后,主分支将如下图所示:

合并分支后

现在分支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 rebase命令尝试找出当前本地分支和合并分支之间的公共祖先,然后通过修改当前本地分支中的提交顺序,将提交推到本地分支。例如如果本地分支提交了A−>B−>C−>D,而合并分支提交了A−>B−>X−>Y,那么Git rebase将当前本地分支转换为类似于A−>B−>X−>Y−>C−>D。 当多个开发人员处理单个远程存储库时,你不能修改远程存储库中的提交顺序。在这种情况下,你可以使用rebase操作将本地提交置于远程存储库提交之上,并可以推动这些更改。

赞(0)
未经允许不得转载:srcmini » 深入Git开发:Git分支管理和操作详细介绍

评论 抢沙发

评论前必须登录!