Featured image of post Git入门之分支管理

Git入门之分支管理

2117 words

入门之分支管理

创建本地分支

当初始化一个版本库并进行第一次提交的时候,如果没有创建指定分支,并切换到该分支,commit操作默认会在本地创建master分支,并将内容提交到master分支。一般我们会在版本库中维护一个master分支,如下图所示:

我们在master分支上,进行了C1、C2、C3三次提交,且当前指针指向C3提交。一般情况下,我们只会将已经成熟的代码存放到master分支,而将正在开发的代码或者测试版的代码放到其他分支。这时,我们就需要新建分支,以在该分支进行开发。如下图:

当我们在主分支进行了C2提交后,新建了develop分支,并在其上进行了两次提交。此时,工作区指针HEAD指向develop分支。 创建本地分支用到的命令是git branch,而分支切换用到的命令是git checkout。git checkout是有很多用途的命令,在这里我们只讲它在分支操作中的使用。下面我们详细介绍这两个命令的使用。

  • 分支切换 可以使用git checkout 命令切换到其他分支。如你本地有master分支和develop分支,目前你正处于develop分支进行开发,现在你想切换到master去,则可以执行操作:   git checkout master

这样就能切换到master分支继续进行开发。

  • 创建新的分支 当你需要创建一个新的分支的时候,可以使用git branch命令,其具体使用格式为:   git branch 新的分支名字

使用示例如下:

1
2
#创建名为new_branch的新分支
git branch new_branch
  • 创建新分支的同时切换 切换到一个新的分支,有一个更为简洁的命令:git checkout -b,它的使用格式为: git checkout -b 新的分支 名字

其具体使用方法如下:

git checkout -b new_branch

这样就可以创建,并切换到了new_branch分支。

删除本地分支

现在我们来看一个实际的例子。请看下图:

首先,我们在master工作到 C1,然后开始一个新分支develop分支,做为测试版的代码分支。提交到C5的时候,又需要临时解决一个问题,于是从C5的地方又分出一个分支issue。提交到C7的时候,该issue被解决。issue分支已经失去其意义,则需要将其删除,以保持本地版本库分支树的干净。我们将issue分支上的代码,合并到develop上之后,就可将issue分支删除。删除issue分支后的分支树如下:

其中,C8为合并issue分支所进行的提交。

删除本地分支,需要用到git branch命令,且需要-D参数,具体命令格式为:   git branch -D 需要删除的分支的名字

具体使用示例如下:

1
2
#删除develop分支
git branch -D develop

示例中的命令,能够将本地分支develop删除。

删除远程分支

删除分支用到的git命令是git push,在具体的使用过程中有不同的用法。

  • 通过推送空分支到远程分支,实现删除。 一个删除远程分支的方法是,推送一个空分支到远程指定分支,以实现删除。推送本地分支到远程分支的方法是: git push 远程主机名 本地分支:远程分支 与之类似,推送空分支实现删除的方法是:   git push 远程主机名 :远程分支

即:前没有指定本地分支名。具体的使用示例如下:

1
2
#删除远程develop分支,其中origin为远程仓库名
git push origin :develop
  • 通过delete参数删除远程分支: 除了推送空分支到远程分支外,也可以通过delete参数实现删除。具体的命令格式为:   git push 远程主机名 –delete 远程分支名 具体使用示例如下:
1
2
#删除远程develop分支,其中origin为远程主机名
git push origin --delete develop

本地分支合并

分支合并需要用到git merge命令,具体的命令格式为:

  git merge 需要合并的分支

在具体使用中,如当前处于master分支,需要将develop分支合并到master分支,则具体的使用方式如下:

  git merge develop

同时,分支合并也分为正常合并和快进式合并,通过为git merge添加参数,即可实现不同操作。

  • 快进式合并 默认情况下,Git执行"快进式合并",即fast-farward merge,会直接将被合并的分支指向需要合并的分支。如下图:

当需要将右侧分支(develop)合并到左侧分支(master)时,master分支会生成一个指针,直接指向develop。快进式合并为默认合并方式,不需要添加任何其他参数,使用git merge 需要合并的分支即可完成。

  • 正常合并 正常合并的方式如下图:

如图所示,Master分支上产生了一次新的提交,也就是说生成一个新节点完成了合并,这样的话,版本演进更清晰。

下面我们以一个具体的例子,来演示一下这两种合并方式的区别:

1.创建master分支,并在其上提交hello文件;

2.从master分支切换到新分支develop,并进行两次提交,分别将hello1、hello2两个文件提交到develop分支;

3.切换回master分支,执行git merge develop进行快进式合并,然后查看master分支的日志,得到如下提示信息:

如上图可知,master分支多了develop分支上的两次提交信息。

4.将master分支回退到合并前状态,再次执行git merge –no-ff develop,进行非快进式合并,然后再次查看日志:

可见,master分支发生了分叉,且master多了一次提交。

通过以上分析,两种合并方式的区别就很明显了。

使用 Hugo 构建
主题 StackJimmy 设计