GIT教程 — 浅析分支管理(一)

浅析分支管理






我们在以前GIT版本回退当中我们明白了GIT本地存储的时间线,并且对它的底层原理具有一定的理解和认识,就是下图这个样子:

GIT教程 — 浅析分支管理(一)
当然由于我们是进行演示的所以就只有一个master主分支,其实在一个大型项目中那时候相当多数目的分支的,有的人要那么多分支有什么

用?  分支的用处其实就是多人协同合作的核心.  下面一张图帮我们理解分支的作用.

GIT教程 — 浅析分支管理(一)
假设有三个平行世界,而你一无所知刚上大学,在三个平行空间里面你分别学习了C++,java,pathon 突然有一天宇宙能量失衡了,三个平

行宇宙合体了,这个时候的你就是精通C++,java,pathon的编程大佬. 其实这个事例就是分支的作用,在不同的地方开发,然后最后合并

主分支了,大家一起协同维护主分支的代码. 通常我们刚开始创建一个本地库的时候,git会自主创建一个master分支(也就是我们的主分

支),然后我们也可以创建其他分支.在其他分支上面作业,最后一起合并到主分支之上!


分支的创建


刚刚我们已经见识到,GIT本地库的时间线,其实这个事件线就是一条分支. 截止到目前,只有一条时间线.但是在GIT当中,这个分支叫做

主分支,既master分支.HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支.

我们来看看添加一个分支dev的过程: 

GIT教程 — 浅析分支管理(一)
一开始的时候,master分支是一条线,GIT用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

GIT教程 — 浅析分支管理(一)
上面我们知道从现在开始对工作区的提交和修改就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

GIT教程 — 浅析分支管理(一)
假如我们再dev上的工作完成了,就可以吧dev合并到master上.最简单的方法就是如图所示,直接把master指向dev的当前提交,就完成合并.

所以GIT分支合并很快!也就是改改指针,工作区内容也不变. 合并完分之后,一般来说dev分支就没有存在的理由了,所以为我们正好删除

掉dev分支,删除dev分支就是将dev指针删除掉. 删除后,我们就剩下一条master分支:

GIT教程 — 浅析分支管理(一)
我们现在都已经get到了分支合并的原理,现在我们开始学习命令,这里主要列出查看分支,创建分支,切换分支,删除分支,以及合并分支:

创建一条分支:$ git branch xxx

查看一条分支: $ git branch

切换到一条分支: $ git checkout xxx

代码演示:

GIT教程 — 浅析分支管理(一)

其实你也可以这样,创建一个分支并且切换到该分支上: $ git checkout -b xxx

GIT教程 — 浅析分支管理(一)

合并其他分支到该分支上面: $ git merge xxx  注意这里合并方式有很多种,现在我们看到的是Fast-forward合并,也就是合并为"快进形

式".也就是直接把master指向dev的当前提交,所以合并速度非常快. 当然不是每次合并都能Fast-forward,其他的在后面.现在我们将

切回master,然后合并

GIT教程 — 浅析分支管理(一)

最后一个就是删除分支了,命令很简单: $ git branch -d xxx 下面演示:

GIT教程 — 浅析分支管理(一)

因为分支的执行效率非常高,并且它的创建,合并,删除都非常的快,所以GIT鼓励你使用分支完成某个任务,合并后再删除分支,这和

直接在master分支上工作效果是一样的,但过程更安全.


分支冲突



当我们沉浸在合并分支的高效和完美的时候,有没有人想过如果两个分支是一个对立面他们合并好了会怎么样??  比如第一世界的小

亮是一个正义的警察,而在第二世界是一个毒枭....  这个时候,你突然将第一世界和第二世界合并那么这个小亮很大概率是一个多重

人格的精神疾病患者了. 所以合并分支,也会出现这种情况,也就是我们说过的分支冲突,所以我们来看看如何来解决这个分支冲突呢??

我们同时分别在我GIT下面的MT和master分支上面提交了liang.txt,并且提交的内容还不一样...

master的提交:

GIT教程 — 浅析分支管理(一)

MT的提交:

GIT教程 — 浅析分支管理(一)

现在我们看来目前为止我们的分支示意图是这样的->>>>>>>>>

GIT教程 — 浅析分支管理(一)
这个时候,我们来尝试一下切换回主分支,然后将分支合并,尝试让我们的master分支"人格分裂"一下:

GIT教程 — 浅析分支管理(一)

我们发现GIT不允许"人格分裂"产生,并且还帮你找到了你在哪里分裂,让我们去文件里面修改,然后只留下来一个"人格",这个时候

你只能乖乖回到文件里面,然后做出取舍将文件重新修改,并且重新git add以及git commit,这个时候其实文件已经合并结束了,

也就是下图那个样子:

GIT教程 — 浅析分支管理(一)

这个时候肯定会有人不相信,凭什么你说的我都要相信,不要以为画了几张图我就相信你(手动微笑)! 好,有质疑心没问题! 还记

得我们的git log命令吗? 接下来 我们来看看git bash上面直观的分支冲突解决之后的样子!!

GIT教程 — 浅析分支管理(一)

最后我们再删除掉MT分支,一次完美的分支合并就结束了. 目前为止,我们对分支有了自己的理解和认识,并且可以自己创建一个

分支,自己切换分支然后合并分支,以及解决掉合并分支中的分支冲突问题. 但这些只能让你熟悉分支的用法,但并不能让你理解分支

在大家合作当中是如何使用的,所以下一个博客当中,就会有分支的管理策略,以及BUG分支,Feature分支的应用. 更加偏重于实际运

用当中的用法. 但是这些都前提都是,你要熟悉分支的基本操作.