在软体开发的过程当中,几乎都是以团队为单位在开发,那是否有个共同的机制,可以掌握每个团队成员的开发进度,也可以让成员各自独立开发自己的部分,而不互相影响呢?
以下,我们就要来了解Git重要的核心之一:分支(branch)
分支是什么?
图片来源
假设客户有个正式上线的网站,位于master分支(蓝点),版本是0.1。
上线数日,发现bug要修。
但总不可能边修边update,让使用者看到。也不可能把网站关掉,等修好再上线。
这时,可以开一条hotfixes分支(红点),master分支与hotfixes分支的内容一模一样。
换个角度想,这两条分支,是平行时空,在hotfixes分支所做的任何异动,跟master分支无关,完全无影响。
我们就可以在hotfixes分支做任何事情,也不怕改坏,导致网站挂掉。
等修好,确认OK,就跟master分支合併(merge),合併后的master分支,commit成0.2版。
这样做的好处就是,我们在处理bug的过程中,网站依旧可以上线,顶多只是有bug。
不只hotfixes,假设客户想要新增功能,可以再另开develop与feature分支,
每测试一个阶段就commit一次,正式上线之前,还可以另开release分支,做最后确认,
测试通过,合併到master分支,成1.0版,
再次发现问题,一样回到develop与feature分支修改。
建立分支
新建Angular专案。
一进入Git Bash就会在资料夹旁显示目前所在的分支(master)。
master是最初预设的分支。
指令git branch可以查看目前有哪些分支,因为专案无任何异动,所以目前只有master分支。
指令 git branch [分支名称],可以建立新的分支。
目前有两条分支:master、feature。
切换分支
指令 git checkout [分支名称],可以切换分支。
从master分支切换到feature分支。
同时建立与切换分支
指令 git checkout -b [分支名称],可以同时建立与切换分支
在建立hotfixes的同时,直接切换过去。
目前专案有3条分支。
删除分支
指令 git branch -d [分支名称],可以删除分支。
重点注意,无法删除本身所在的分支。
假设要删除hotfixes分支,就必须得切换到其他分支,才能执行。
成功删除hotfixes分支,确认目前专案分支数。
删除分支的限制
重点注意,若要删除的分支,本身有commit,且未被合併(merge),无法使用-d删除。
在feature分支把src资料夹删掉,并commit。
执行git branch -d feature会收到警告。
意思是说,如果确定要删除,请使用-D指令。
执行git branch -D feature
确实删除。
回复误删的分支
刚刚删除的範例,成功执行后,git会提供被删除分支最新的commit ID。
再次建立分支,并加上commit Id。
连同commit纪录都会复原回来。
分支的独立性
稍早说过,分支之间并不会互相影响,可以视为独立的个体。
接续刚刚的範例。
目前feature分支,有2个commit,最新的commit是删除scr资料夹。
所以可以预见的是,专案中,不会看到src资料夹。
切换到master分支。
从log可以看出,只有1个commit。
并且scr资料夹出现了,这是因为,master分支并没有删除scr资料夹。
那接下来,我们在master分支删除tslint.json,并且commit。
所以,目前最新的master分支状态是这样的:有src资料夹,删除tslint.json
切换到feature分支。
feature分支状态:删除src资料夹,有tslint.json。
藉由以上的範例,了解分支之间的确是不会互相影响的。
本文为观看网路教学的学习笔记。