分支是什么?
个人觉得用“分身”这个词来形容这个功能更佳,具体作用的话,大概就是鸣人用影分身来提升实力的作用吧。什么?你没看过火影?那好吧,来一个正经的解释:以coding 为例,当你正在开发一个新功能时,突然发现有一个线上的bug需要紧急修复,但是新功能还没有完成,肯定不能上,那么这个时候,可以以目前线上代码为源版本,创建一个分支,将bug修复、测试通过后提交到线上版本,你会发现:bug修复了,而且也没有因为新功能的开发影响到线上代码,这就是分支的作用。
如果没有用分支,上面的情况应该怎么处理呢?首先,把开发到一半的新功能全部还原,然后修复bug、测试,发布到线上。很明显,要么不还原正在开发的功能,影响线上代码(这绝对是不允许的,所以只能还原开发中的代码),要么还原正在开发的代码,无论怎样,都会影响整个工作进度。这样一对比,就更容易理解分支的作用了吧。
Git的分支好在哪?
几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。
有人把 Git 的分支模型称为“必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来。Git 有何特别之处呢?Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在瞬间完成,并且在不同分支间切换起来也差不多一样快。和许多其他版本控制系统不同,Git 鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系。理解分支的概念并熟练运用后,你才会意识到为什么 Git 是一个如此强大而独特的工具,并从此真正改变你的开发方式。
分支怎么用?
按照使用流程,大致有查看分支、创建分支、合并分支、删除分支等几大功能,按照此顺序,我们一个一个来学习一下。
查看分支
通过命令“git branch [-a|-r]”,这个上一篇介绍过,默认查询本地分支,-a 表示查询所有分支,-r 表示查询远程分支
创建分支、切换分支
到目前为止,我们所有的操作,都是在一个分支中完成的,当你git init 的时候,就自动创建了一个叫master的分支,即主分支,一般来说,为了不影响主分支,我们会创建一些其它的分支如:开发分支,bug修复分支,优化分支等,当这些分支完成各自的工作后,再合并到master中,让master分支永远保持正常无误的状态。
创建分支一般有以下操作,根据情况自行选择使用:
git branch [branch-name]:创建一个新的分支(基于当前分支),但依旧停留在当前分支,不会切换到新的分支,想要切换分支,需要再次使用命令“git checkout [branch-name]”切换分支,下图是我演示的一个创建分支--查看分支--切换分支--查看分支的流程,请注意看区别:
比较细心的读者,应该在前几篇文章的截图中就注意到了,项目目录后有个蓝色的括号(master),这个其实就是表示当前分支名称,通过语句查看分支的话,在当前所在分支前会有*号标注,且分支名字有绿色标注,在演示中我用的是win7系统装的官方的Git,其他的系统显示可能不太相同,但意思都一样。
需要说明的一点,使用一些界面工具或其他工具时,你会看到一个“HEAD”标记,表示当前分支的意思(其实就是上图的*和绿色,不知道官方的这个命令行界面为啥不显示HEAD..),后面介绍界面工具的时候会演示出来。
git checkout -b [branch]:此命令表示,创建一个新分支,并且切换到新分支中,其实就是“git branch”+“git checkout”操作,如图所示:
合并分支
上面说到,分支的工作完成后,一般会合并到master分支(当然合并到别的分支也可以),通过命令“git merge [branch] ”,将某一个分支,合并到当前分支(注意是合并到当前分支,即HEAD指向的分支)。
如图所示,我当前所在分支为dev分支,通过命令“git merge testBranch” 将testBranch分支所做的工作,合并到dev分支下。
注意:合并分支可能会出现冲突,有些git可以自动解决,有些需要手动解决(比如修改了同一个地方),在远程仓库篇简单的提了一下合并冲突,那么遇到这种冲突,我们怎么取解决呢?我在dev分支和testBranch中的test.txt文件中分别在第二行添加内容,然后将testBranch分支合并至dev分支,结果如图所示:
提示有冲突需要手动解决,此时打开test.txt文档,内容为(2-6行为冲突):
其中<<<<<<< HEAD 至 =======之间表示当前分支(dev)库中的内容,=======至>>>>>>>testBranch之间表示是合并过来的testBranch分支的内容,此时需要手动将此部分冲突的内容解决,如将2-6行改为如图所示:
手动解决冲突内容后,再次提交该文件即可。当然了,你也可以不解决冲突,直接提交文件,但后果自负。
tip:通过命令行提交文件时,不会有提示(即使有冲突),直接提交,在使用一些界面工具时,会提示那些文件有冲突需要解决。
删除分支
当你的分支完成它的任务,合并到相应的分支后,再继续留着它也没什么意义了,那么就删除它吧,反正git的分支创建、切换那么快,需要的时候再创建一个就好喽,这点儿确实要比其他的版本控制系统要好太多了。通过命令“git branch -d [branch-name]”将本地分支删除,如图所示:
如果想删除远程仓库中的分支,可以通过命令“git push origin --delete [branch-name]”或“git branch -dr [remote/branch]”。
注意:尽量不要擅自删除远程仓库的内容,除非它只为你一个人服务。
对于分支的基本操作命令,就介绍到这里,对于分支的使用,可不仅仅是这几个命令这么简单。有兴趣的话,可以去了解一下分支策略,后续我也会分享一篇简单的分支策略,来和大家一起学习。