在 git 里面做版本管理,真的像是在打游戏似的,有种时空穿梭的感觉。请注意,不仅仅是只有时间上面的穿梭,还顺带着可以穿越空间维度,畅游代码版本的平行宇宙。
为了让大家更好的了解 git 平行宇宙,先来张略微震撼的示意图。
先解释一下这张图。
宇宙在爆炸初期分裂了 N 个平行空间。而我们生活的宇宙属于当前空间的一份子。随着时间的推移,我们的宇宙从第一个元素诞生慢慢衍生到了现在的的科技社会。这个过程就类似于我们一个型号的代码,在不断的迭代,增加功能。多个平行空间是独立的,它们拥有各自不同的发展命运,但是它们都是基于一个起点。举个和咱们程序开发相关的例子。
如图所示,我们公司开发了一款万能遥控器,一经推出得到了很好的口碑。就这样,迎来了大量的客户。这是后客户 A 说,你们的遥控器必须有我们的按键灯光效果。客户 B 又说,我要它能自己飞到我手上。但是他们都是在原始的功能上增加了这些特有的功能。这样子,我们就可以给他们分别创造一个空间,来迭代和修改。这样三种版本的代码不会产生影响。具体如何操作呢?
首先我们肯定有一个最新版本的代码:万能遥控器基础功能。
这时候顾客 A 想要在这个基础上增加灯光的功能了。我们就需要动用 git 的创建新空间的咒语了:git checkout -b xxx。如下图,就创建了一个 customerA 的平行宇宙出来了。它就是从“万能遥控基础功能”衍生出来的。
那怎么查看我们全部的平行空间呢?通过 git branch。下面出现的 master 和 customerA 就是我们当前具备的平行宇宙。为什么有一个叫 master 呢?那就是 git 诞生初期规定的。第一个宇宙就叫 master。* 说明了我们当前身处哪一个平行宇宙。(当前为:customerA)
那我们看一下,customerA 中有些什么吧。如果猜的不错,应该和 master 中的一样,只包含了一个 “万能遥控器基础功能”。看到下图,果不其然。
比如此时我们按照 A 客户的需求做好了 “增加灯光效果”的功能。那么保存之后就是这个样子的。
好了,我们功能测完之后,这个版本就可以不用动了,于是我们就转战原始的 master 平行空间去开发公司新的需求和功能了。我们只需要执行 git checkout xxx 就能切换到指定的平行空间了.
同理我们想在 master 的基准原点再创建一个 customerB 的平行空间,增加代码功能“会飞”。基本和 customerA 的操作一致,不在赘述。直接上截图。
最终的效果就是下面这样子。三个版本之间互不干扰。齐头并进。想要开发哪个版本就切换到指定的平行空间就可以了。
不同空间能不能融合呢?答案是肯定的,下一节,咱们聊聊空间融合的细节。