管理分支

收藏851

阅读5052

更新时间2025-08-21

分支操作允许创建另一条开发线。 我们可以使用这个操作将开发过程分成两个不同的方向。 例如,我们发布了 6.0 版本的产品,我们可能希望创建一个分支,以便将 7.0 功能的开发与 6.0 错误修复分开。


创建分支

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

[jerry@CentOS src]$ git branch new_branch

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

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

创建分支操作的图示如下 −

git Tutorial git Tutorial

在分支之间切换

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

[jerry@CentOS src]$ git checkout new_branch
Switched to branch 'new_branch'
[jerry@CentOS src]$ git branch
master
* new_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

删除分支

可以通过在 git branch 命令中提供 -D 选项来删除分支。 但在删除现有分支之前,切换到另一个分支。

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

重命名分支

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

[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

合并两个分支

Jerry 实现了一个函数来返回宽字符串的字符串长度。 新建代码会出现如下 −

[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 
+#include 
+
+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(-)

请注意,Jerry 正在将这些更改推送到新分支,这就是他使用分支名称 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

提交修改后,新的分支会如下所示 −

git Tutorial

Tom 对 Jerry 在他的私人分支中所做的事情感到好奇,他检查了 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 
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 
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary

通过查看提交消息,Tom 意识到 Jerry 为宽字符实现了 strlen 函数,并且他希望在 master 分支中具有相同的功能。 他没有重新实现,而是决定采用 Jerry 的代码,将他的分支与 master 分支合并。

[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(-)

合并操作后 master 分支会出现如下 −

git Tutorial

现在,分支 wchar_support 已与 master 分支合并。 我们可以通过查看提交消息或查看对 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

上面的命令会产生如下结果。

#include 
#include 
size_t w_strlen(const wchar_t *s)
{
   const wchar_t *p = s;

   while (*p)
      ++p;

   return (p - s);
}

测试后,他将代码更改推送到主分支。


[tom@CentOS src]$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To gituser@git.server.com:project.git
5776472..64192f9 master −> master

变基分支

Git rebase 命令是一个分支合并命令,但不同的是它修改了提交的顺序。

Git 合并命令尝试将来自其他分支的提交放在当前本地分支的 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 操作将本地提交置于远程存储库提交之上,然后您可以推送这些更改。

相关

视频

RELATED VIDEOS

更多

免费

phpStudy极速入门视频教程

免费

Midjourney基础课程
初级 Midjourney基础课程

11149次学习

收藏

免费

极客学院Git使用视频教程

免费

尚观shell视频教程
高级 尚观shell视频教程

15709次学习

收藏

免费

尚观Linux入门视频教程
初级 尚观Linux入门视频教程

42887次学习

收藏

免费

尚观Linux初级视频教程
初级 尚观Linux初级视频教程

40264次学习

收藏

免费

尚观Linux中级视频教程
中级 尚观Linux中级视频教程

48298次学习

收藏

免费

尚观Linux高级视频教程
高级 尚观Linux高级视频教程

41982次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号