Git-了解分支&分支(建立、切换、删除、回复)

在软体开发的过程当中,几乎都是以团队为单位在开发,那是否有个共同的机制,可以掌握每个团队成员的开发进度,也可以让成员各自独立开发自己的部分,而不互相影响呢?

以下,我们就要来了解Git重要的核心之一:分支(branch)

分支是什么?

http://img2.58codes.com/2024/20112573aDsnQuwVqn.png
图片来源

假设客户有个正式上线的网站,位于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)。
http://img2.58codes.com/2024/20112573a8pQWtHZy6.png
master是最初预设的分支。
指令git branch可以查看目前有哪些分支,因为专案无任何异动,所以目前只有master分支。

指令 git branch [分支名称],可以建立新的分支。
http://img2.58codes.com/2024/20112573Ce2Gx5bUax.png
目前有两条分支:master、feature。

切换分支

指令 git checkout [分支名称],可以切换分支。
http://img2.58codes.com/2024/20112573OxGvI8s0M3.png
从master分支切换到feature分支。

同时建立与切换分支

指令 git checkout -b [分支名称],可以同时建立与切换分支
http://img2.58codes.com/2024/20112573VTL93e4J4s.png
在建立hotfixes的同时,直接切换过去。
目前专案有3条分支。

删除分支

指令 git branch -d [分支名称],可以删除分支。

重点注意,无法删除本身所在的分支。
http://img2.58codes.com/2024/20112573tZqZUSufjl.png

假设要删除hotfixes分支,就必须得切换到其他分支,才能执行。
http://img2.58codes.com/2024/20112573vLg2UAd1zK.png
成功删除hotfixes分支,确认目前专案分支数。

删除分支的限制

重点注意,若要删除的分支,本身有commit,且未被合併(merge),无法使用-d删除。
在feature分支把src资料夹删掉,并commit。
http://img2.58codes.com/2024/20112573R2hQn4boW8.png

执行git branch -d feature会收到警告。
http://img2.58codes.com/2024/20112573XzduYvZcDQ.png
意思是说,如果确定要删除,请使用-D指令。

执行git branch -D feature
http://img2.58codes.com/2024/20112573p4N4OcSqiP.png
确实删除。

回复误删的分支

刚刚删除的範例,成功执行后,git会提供被删除分支最新的commit ID。
http://img2.58codes.com/2024/20112573v8IAYaiLim.png

再次建立分支,并加上commit Id。
http://img2.58codes.com/2024/201125734KJk0csLPw.png
连同commit纪录都会复原回来。

分支的独立性

稍早说过,分支之间并不会互相影响,可以视为独立的个体。

接续刚刚的範例。
目前feature分支,有2个commit,最新的commit是删除scr资料夹。
所以可以预见的是,专案中,不会看到src资料夹。
http://img2.58codes.com/2024/20112573531s8mts7P.png

切换到master分支。
http://img2.58codes.com/2024/20112573BbcKbA11Lo.png
从log可以看出,只有1个commit。
并且scr资料夹出现了,这是因为,master分支并没有删除scr资料夹。
http://img2.58codes.com/2024/201125734sIkGLI8ry.png

那接下来,我们在master分支删除tslint.json,并且commit。
http://img2.58codes.com/2024/20112573lLLO0RaPAj.png

所以,目前最新的master分支状态是这样的:有src资料夹,删除tslint.json
http://img2.58codes.com/2024/20112573JpZV6AJjlO.png

切换到feature分支。
http://img2.58codes.com/2024/201125738mcac3XT4I.png
feature分支状态:删除src资料夹,有tslint.json。
http://img2.58codes.com/2024/20112573sUy54qIoxl.png

藉由以上的範例,了解分支之间的确是不会互相影响的。

本文为观看网路教学的学习笔记。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章