(五)分支管理详解

最后更新于:2022-04-01 20:06:43

分支管理在咱们实际工作中经常用到,因此掌握分支对于咱们从事移动开发并且使用到了Git这样的分布式版本管理工具来说是很有必要的。比如当你饿了的时候,甲帮你做饭,一帮你烧菜: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42eac59703.jpg) 当然你也可以自己做饭烧菜。但是咱们仍然可以看到,我是从一个饿的状态变成了一个饱的状态,也就是我之前空腹,后来我由甲(分支)和乙(分支)两人同时来帮我完成了完成了“做饭”和“烧菜”的功能,而我的状态也从饥饿变成了吃饱的状态(即饭和菜都提交到了我的肚子里![偷笑](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-18_569ca4488de4a.gif) ),这样咱又有力气干活了。 分支在实际中有什么用呢?假设你准备开发一个新feature,但是需要10天才能完成,前5天你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了,但是如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。有了分支,你创建了一个你自己的分支,别人是看不到的,你还继续在原来的分支上正常工作,直到开发完毕后,再一次性合并到原来的分支(俺饿了...)上,这样,既安全,又不影响别人工作,而且Git分支的创建和修改、删除都是非常快的。 **创建分支**: 使用Git时的每一次提交,Git都会把它们串成一条时间线,这条线就是一条分支。咱们之前一直在master分支上操作,它是一条主分支,并且它指向的是最新的提交,而咱们前面章节讲的HEAD其实指向的就是master,这样就能确定当前分支,以及当前分支的提交点:每次咱们提交时,master就会向前移动一步。当咱们创建新的分支,例如Git新建了一个分支叫dms001,指向master相同的提交,再把HEAD指向dms001,就表示当前分支在dms001上了。(这里可能不好理解,不过你只要记住一点就行了:HEAD指向的是当前分支,而刚创建的分支dms001指向的是提交) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42eac79320.jpg) 下面咱们开始操作一下: 首先创建一个dms001分支,然后切换到dms001分支上(即让HEAD指向该分支) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42eac8eb79.jpg) 然后咱们可以通过git branch来查看当前分支是不是在dms001上(当然也可以直接使用git checkout -b dms001来创建并切换至dms001分支): ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42eaca51f9.jpg) 可以看到星号指向了dms001,这里暂且把星号(*)看成HEAD指针,如果大家对指针不怎么理解的话,可以看看我之前写的一篇“[谈谈我对指针的认识”](http://blog.csdn.net/lhy_ycu/article/details/9346377)。 创建好分支后,咱们再来对之前hellogit.txt文件做做修改,先cat hellogit.txt看看里面的内容: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42eacb8ea1.jpg) 在该文件中再加一句:Create a named dms001 branch. ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42eaccb80c.jpg) 通过git status咱们可以看到,hellogit.txt确实被修改了,而且该状态位于[工作区](http://blog.csdn.net/lhy_ycu/article/details/20651051)。 下面通过前两章讲的,将该文件状态变成[暂存区](http://blog.csdn.net/lhy_ycu/article/details/20651051)状态: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42eace672f.jpg) 然后提交到咱们的[本地仓库](http://blog.csdn.net/lhy_ycu/article/details/20651051): ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42ead06ad4.jpg) 最好咱们将分支切换回主分支master: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42ead1ae2c.jpg) 切换回master分支后,再看一下hellogit.txt文件,刚才添加的那句“Create a named dms001 branch.”不见了!因为那个提交是在发生在dms001分支上,而master分支此刻的提交点并没有变: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42ead32302.jpg) **合并分支:** 合并分支命令很简单,但请注意:合并分支一定要切换至主分支,并且要合并的分支必须commit了: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42ead45b79.jpg) 这时master就指向了dms001的提交了。 请注意:咱们实际工作时一般是没有权限merge的,但因为是学习,所以还是有必要了解一下的。 **删除分支:** 好了,既然已经merge好了,那么我们就可以放心的删除分支dms001了。删除命令如下: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-17_57b42ead5e897.jpg) 好了,咱又只剩master分支了,可以看到无论是创建、合并还是删除分支,速度都是非常迅速的,这也是Git一个非常重要的[特点](http://blog.csdn.net/lhy_ycu/article/details/20574453),而且工作中常用分支来完成咱们的工作。 **小结**:    本章出现的一些概念和常用命令希望大家多花点时间消化和多多操作。
';