在 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 的操作一致,不在贅述。直接上截圖。
最終的效果就是下面這樣子。三個版本之間互不干擾。齊頭并進。想要開發哪個版本就切換到指定的平行空間就可以了。
不同空間能不能融合呢?答案是肯定的,下一節,咱們聊聊空間融合的細節。