本文主要讨论git中的分支管理。
什么是分支?
分支类似于平行时空,我们在提交文件的时候是有一条提交的时间线的,也就是主时间线;记录着对应时间节点文件的提交,而分支就可以在时间线上的某个节点另外创建一条时间线,可以另外记录不同的文件提交,这就是一个分支。
此外,分支创建后也可以进行合并,合并成一条时间线。
创建、切换和合并
下面我们学习如何来创建,切换和合并分支。
1、查看分支
bash
git branch

通过 git branch 命令可以查看当前的分支。在创建git仓库时会默认生成一个master分支。在前面我们查看时看到head指针是指向master分支的,而head指向的分支就是当前正在使用的分支。
2、创建分支
创建分支还是使用git branch命令,只需要在后面加上分支名:、
bash
git branch [分支名]
举个例子:

我们创建的DEV分支的起始节点是基于上一次提交的时间节点的。如果我们需要对DEV分支进行操作,那么就需要让head指针指向我们的DEV分支,也就是分支的切换。
3、切换分支
切换分支需要用到下面的指令:
bash
git checkout [分支名]
【注意】git checkout表示切换分支;而git checkout --表示撤销工作区的内容。

可以看到成功切换到DEV分支了。
4、合并分支
如果需要将分支合并,首先需要将分支切换至要合并的那条分支。例如我们现在要合并到master分支,我们就需要首先选择master分支。
合并分支需要用到下面的命令:
bash
git merge [被合并的分支名]

删除分支
删除分支的时候只能删除当前分支之外的其他分支。例如在上面的例子中,我们如果想要删除DEV分支,就需要先选中master分支后去删除dev分支,不能删除当前所在分支。
删除分支所需的命令如下:
bash
git branch -d [分支名]

合并冲突
合并冲突为这样一种情况,现在两个不同分支有一个相同文件,在两个分支中分别对该文件做出了不同的修改,那么在合并的时候git应该保存哪一份文件呢?这样的一种情况就是合并冲突。
git会将这两个分支修改的代码都进行保存,并将冲突部分的代码使用===号间隔,提示这部分代码发生冲突,而到底应该保留哪一部分的代码,需要我们手动来决定,保留需要的代码,删除掉冲突的不需要的代码部分。

上面的图片中所展示的就是冲突部分代码。等号上面的是当前分支中的代码;等号下面是另一个合并进来的分支中的代码,该图中就是dev1分支中的代码。
且手动解决之后,一定不要忘记再提交一次!!!
合并模式
在合并提交的时候默认是使用的fast forward模式;当主分支没有新提交,分叉线是单向前进时,Git 不创建新合并提交,直接把主分支指针平移快进到功能分支最新节点。
简单来说就是主干没动的情况下,只有自己的功能分支往前写了代码,为了不搞复杂,直接把主干指针挪到自己的分支末尾。这样的一种合并方式。
此外,介绍另外一种合并方式:no-ff:哪怕满足快进条件,也强制不使用快进,主动生成一个新的 Merge 合并提交,保留分支分叉痕迹。
简单说就是 就算可以直接挪指针,也一定要留个记号,专门生成一个「合并节点」进行标记这是从哪个分支合过来的。
切换合并模式的命令如下:
bash
git merge [模式名称] [分支名]
如果不填模式名称就是默认为fast forward模式。

强制删除分支
如果我们在开发过程中因为某些原因需要将该功能取消,我们所在当前分支就没用了,就需要将该分支删除。不过git会保护我们所创建的分支,在合并之前不会让分支被删除掉。那么这个时候就需要进行强制删除分支,命令和之前删除的命令一样,只不过把-d改为-D。
bash
git branch -D