Git 管理分支
分支操作允许创建另一条开发线。我们可以使用此操作将开发过程分叉为两个不同的方向。例如,我们发布了一个适用于6.0版本的产品,我们可能希望创建一个分支,以便将7.0功能的开发与6.0错误修复分开。
创建分支
Tom使用git branch <分支名称>命令创建一个新分支。我们可以从现有分支创建一个新分支。我们可以使用特定的提交或标签作为起点。如果未提供任何特定的提交ID,则该分支将以HEAD作为起点创建。
一个新的分支被创建了;Tom使用git branch命令列出可用的分支。Git在当前选中的分支之前显示一个星号标记。
下面显示了创建分支操作的图示表示−
在分支之间切换
Jerry 使用 git checkout 命令在分支之间进行切换。
创建和切换分支的快捷方式
在上面的例子中,我们分别使用了两个命令来创建和切换分支。Git提供了checkout命令的 --b 选项;这个操作会创建一个新的分支并立即切换到新分支。
删除分支
可以使用git branch命令提供-D选项来删除分支。但是在删除现有分支之前,请先切换到其他分支。
Jerry当前正在 test_branch 上,并且他想要删除该分支。所以他切换分支并执行以下操作来删除分支。
现在,Git只会显示两个分支。
重命名分支
Jerry决定在他的字符串操作项目中添加对宽字符的支持。他已经创建了一个新分支,但是分支名称不合适。因此,他通过使用 -m 选项后加上 旧分支名称 和 新分支名称 来更改分支名称。
现在,git branch命令将显示新的分支名。
合并两个分支
Jerry实现了一个函数,用于返回宽字符字符串的长度。新代码如下所示:
上述命令产生以下结果−
测试后,他将自己的更改提交并推送到新分支。
请注意,Jerry正在将这些更改推送到新的分支,因此他使用了分支名称 wchar_support 而不是 master 分支。
上述命令将生成以下结果。
提交更改后,新分支将显示如下−
Tom 对 Jerry 在他的私有分支上做的事情感到好奇,并查看来自 wchar_support 分支的日志。
上述命令将会产生以下结果。
通过查看提交消息,Tom意识到Jerry为宽字符实现了strlen函数,并且他希望在主分支中拥有相同的功能。他决定通过将Jerry的分支与主分支合并来获取Jerry的代码,而不是重新实现。
合并操作后,主分支将显示如下 −
现在,分支 wchar_support 已与主分支合并。我们可以通过查看提交消息或查看对string_operation.c文件所做的修改来验证它。
以上命令将产生以下结果。
经过测试,他将代码更改推送到主分支。
重新设置分支
Git rebase命令是一个分支合并命令,但不同之处在于它修改了提交的顺序。
Git merge命令尝试将其他分支的提交放在当前本地分支的HEAD之上。例如,你的本地分支有提交A->B->C->D,合并分支有提交A->B->X->Y,那么git merge将把当前本地分支转换为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操作将你的本地提交放在远程仓库提交之上,并且可以推送这些变更。