Git 简明教程

Git - Managing Branches

分支操作允许创建另一行开发内容。我们可以使用此操作将开发进程分叉到两个不同的方向。例如,我们为 6.0 版本发布了一个产品,我们可能希望创建一个分支,以便使 7.0 功能的开发与 6.0 的 bug 修复保持分离。

Create Branch

Tom 使用 git branch <branch name> 命令创建一个新分支。我们可以从现有分支创建一个新分支。我们可以使用特定的提交或标签作为起点。如果没有提供任何特定提交 ID,那么将以 HEAD 为起点创建分支。

[jerry@CentOS src]$ git branch new_branch

[jerry@CentOS src]$ git branch
* master
new_branch

新分支已创建;Tom 使用 git branch 命令列出可用分支。Git 在当前签出的分支前显示星号标记。

下面显示创建分支操作的图片表示形式 −

before branch create
after branch create

Switch between Branches

Jerry 使用 git checkout 命令在分支之间切换。

[jerry@CentOS src]$ git checkout new_branch
Switched to branch 'new_branch'
[jerry@CentOS src]$ git branch
master
* new_branch

Shortcut to Create and Switch Branch

在上面的示例中,我们分别使用了两个命令创建并切换分支。Git 为 checkout 命令提供 –b 选项;此操作创建一个新分支,然后立即切换到新分支。

[jerry@CentOS src]$ git checkout -b test_branch
Switched to a new branch 'test_branch'

[jerry@CentOS src]$ git branch
master
new_branch
* test_branch

Delete a Branch

可以通过使用 –D 选项和 git 分支命令删除分支。但在删除现有分支之前,请切换到另一个分支。

Jerry 目前在 test_branch ,他希望删除该分支。因此,他切换分支并删除分支,如下所示。

[jerry@CentOS src]$ git branch
master
new_branch
* test_branch

[jerry@CentOS src]$ git checkout master
Switched to branch 'master'

[jerry@CentOS src]$ git branch -D test_branch
Deleted branch test_branch (was 5776472).

现在,Git 只会显示两个分支。

[jerry@CentOS src]$ git branch
* master
new_branch

Rename a Branch

Jerry 决定在他的字符串操作项目中添加对宽字符的支持。他已经创建了一个新分支,但分支名称不恰当。因此,他使用 –m 选项,后跟 old branch namenew branch name ,更改分支名称。

[jerry@CentOS src]$ git branch
* master
new_branch

[jerry@CentOS src]$ git branch -m new_branch wchar_support

现在,git branch 命令将显示新的分支名称。

[jerry@CentOS src]$ git branch
* master
wchar_support

Merge Two Branches

杰瑞实现了一个返回宽字符长度的字符串长度的函数。现在代码将显示如下所示:

[jerry@CentOS src]$ git branch
master
* wchar_support

[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src

[jerry@CentOS src]$ git diff

上述命令会产生以下结果 −

t a/src/string_operations.c b/src/string_operations.c
index 8ab7f42..8fb4b00 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,4 +1,14 @@
#include <stdio.h>
+#include <wchar.h>
+
+size_t w_strlen(const wchar_t *s)
+
{
   +
   const wchar_t *p = s;
   +
   +
   while (*p)
   + ++p;
   + return (p - s);
   +
}

在测试后,他提交并推送下代码更改到新的分支。

[jerry@CentOS src]$ git status -s
M string_operations.c
?? string_operations

[jerry@CentOS src]$ git add string_operations.c

[jerry@CentOS src]$ git commit -m 'Added w_strlen function to return string lenght of wchar_t
string'

[wchar_support 64192f9] Added w_strlen function to return string lenght of wchar_t string
1 files changed, 10 insertions(+), 0 deletions(-)

请注意,杰瑞将这些更改推送到新的分支,这才使他使用分支名称 wchar_support ,而不是 master 分支。

[jerry@CentOS src]$ git push origin wchar_support   <−−− Observer branch_name

上述命令将产生以下结果。

Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 507 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
To gituser@git.server.com:project.git
* [new branch]
wchar_support -> wchar_support

在提交更改后,新分支将显示如下所示:

commit in branch

汤姆很想知道杰瑞在他的私有分支中做了什么,并从 wchar_support 分支中查看了日志。

[tom@CentOS src]$ pwd
/home/tom/top_repo/project/src

[tom@CentOS src]$ git log origin/wchar_support -2

上述命令将产生以下结果。

commit 64192f91d7cc2bcdf3bf946dd33ece63b74184a3
Author: Jerry Mouse <jerry@tutorialspoint.com>
Date: Wed Sep 11 16:10:06 2013 +0530

Added w_strlen function to return string lenght of wchar_t string


commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <tom@tutorialspoint.com>
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary

通过查看提交消息,汤姆得知杰瑞实现了一个宽字符的 strlen 函数,他还希望在主分支中实现相同的功能。他决定不重新实现,而是通过将自己的分支与主分支合并来采用杰瑞的代码。

[tom@CentOS project]$ git branch
* master

[tom@CentOS project]$ pwd
/home/tom/top_repo/project

[tom@CentOS project]$ git merge origin/wchar_support
Updating 5776472..64192f9
Fast-forward
src/string_operations.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)

在合并操作后,主分支将显示如下所示:

merge branch

现在,分支 wchar_support 已与主分支合并。我们可以通过查看提交消息或通过查看对 string_operation.c 文件所做的修改来验证这一点。

[tom@CentOS project]$ cd src/

[tom@CentOS src]$ git log -1

commit 64192f91d7cc2bcdf3bf946dd33ece63b74184a3
Author: Jerry Mouse
Date: Wed Sep 11 16:10:06 2013 +0530

Added w_strlen function to return string lenght of wchar_t string

[tom@CentOS src]$ head -12 string_operations.c