前言

今天这篇文章我们继续Git教学的第五篇,主要讲解的是git的分支管理,这也号称是git的‘必杀技特性’。

git分支使用手册(Git教学篇5-git必杀技特性)(1)

git

分支是什么?

git通过保存一系列不同时刻的文件快照来实现数据存储。

每次在进行git提交时,都会生成一个提交对象,这个提交对象都会产生一个指向暂存区内容快照的指针。而且每个提交对象中都会包含一个指向上一次提交(父提交对象)的指针。

通过这一系列指针的指向,就构成了一个分支上的所有提交记录。如下图中,一个分支上的三次提交记录,生成三个版本快照,然后通过指针相连。

git分支使用手册(Git教学篇5-git必杀技特性)(2)

HEAD指针

通过git branch命令也可以查看当前处于哪个分支上。如果当前在哪个分支上,则在分支名之前有一个‘*’标识。

git分支使用手册(Git教学篇5-git必杀技特性)(3)

git branch

分支的合并

在一个上线的项目中,一般至少会有多个用于运行的分支,比如生产环境一般是master分支,开发环境下的dev分支,测试环境下的test分支,还有一系列的个人开发分支self。

分支的合并有merge指令即可完成,merge完成后两个分支记录将处于同一个状态。

比如我们在发现一个线上问题时,需要由master分支新拉一个hotfix分支进行问题的修复,此时的分支情况可能如下如所示。

git分支使用手册(Git教学篇5-git必杀技特性)(4)

分支记录

在hotfix分支上修复完问题后,可以切换至master分支,然后将hotfix分支合并至master分支。

git分支使用手册(Git教学篇5-git必杀技特性)(5)

合并分支

在分支合并完后,分支情况如下图所示。

git分支使用手册(Git教学篇5-git必杀技特性)(6)

合并后的分支

删除本地分支

当我们不再需要一个本地分支时,可以通过-d参数来删除它。

有一点需要注意的是,需要先checkout到别的分支才能删除需要删除的分支。

如上一个例子,当hotfix修复完毕后可以将hotfix分支删除。

git分支使用手册(Git教学篇5-git必杀技特性)(7)

删除分支

有冲突时的分支合并

当多人协同开发时,出现文件冲突是一件很常见的事情。

冲突的原因是同一个文件的同一个部分,在不同的分支中都有修改,这样git就无法自动合并,而是将有冲突的信息暴露出来交由开发人员自己修改后再进行合并。

当我们通过merge命令合并有冲突的分支时,会出现CONFLICT字眼,如下图中的提示信息。

git分支使用手册(Git教学篇5-git必杀技特性)(8)

冲突提示

当出现冲突时,是无法merge成功的,后续的操作也将被阻塞住,因此解决冲突是一步必要的操作。

如果文件冲突后,我们打开冲突的文件,冲突部分的内容会有很明显的<<<<<< ======= >>>>>>> 等标识。

如下图所示就是一个冲突的文件内容。

git分支使用手册(Git教学篇5-git必杀技特性)(9)

冲突文件内容

上图中表示的是在HEAD分支和iss53分支的index.html文件冲突,接下来就需要开发人员进行决定,是选用HEAD分支中的内容还是选用iss53分支中的内容,而删掉另一个分支的内容。

当开发人员将冲突解决后,需要再进行一次git add操作将修改的文件再次添加至暂存区,并且进行一次commit操作。

解决冲突时可以直接通过git commit而不用添加-m选项填写额外的提交信息,默认的提交操作后会出现以下信息。

git分支使用手册(Git教学篇5-git必杀技特性)(10)

解决冲突后默认commit信息

当然如果手动填写了-m提交信息,也是可以的,就如同正常的提交操作。

结束语

今天这篇文章主要讲解了git branch相关的内容,通过实际的演示提示大家的理解,大家要好好消化。

,