上一篇和大家講解了不用的時空之間來回穿梭,好了,這次我們講講關(guān)于不同時空中的你是如何產(chǎn)生關(guān)聯(lián)的。比如,當(dāng)前的你學(xué)會了做飯,如何將這個技能完完全全的復(fù)制給其他時空的“你”,瞬間讓他們學(xué)會做飯?且看以下分解。
如上圖,現(xiàn)在又三個不同分身,分別是 master,A,B。他們各自學(xué)會的技能依次是:做飯,游泳,工作。示意圖如下。
現(xiàn)在問題來了,我想讓 A 學(xué)會做飯和工作的技能,該怎么辦呢?有人肯定會說,可以讓他學(xué)呀。這就是程序員開發(fā)過程中最辛苦和最沒有價值的地方。相同功能的代碼反復(fù)的 copy 和移植,降低了咱們碼農(nóng)的創(chuàng)造力,浪費(fèi)大量的時間移植和適配不同版本的代碼。
那么有沒有什么比較簡易的方法呢? 答案是肯定的。git 就給咱們提供了一個簡易的代碼 copy 的功能“ git merge ”。比如,我們再 A 分支上使用指令:git merge B。執(zhí)行完這條語句過后,A 就輕松獲得了 B 從 " 初始版本 -> 工作 " 過程中的全部經(jīng)歷。這就好比什么呢,A 當(dāng)時和 B 分家之后,A 切身實(shí)地的感受了一套 B 的人生經(jīng)歷。
以上這種是一個比較簡單的情況,大家的技能不存在任何的交集。但是,如果 A 和 B 都學(xué)過游泳,但是他們的泳姿肯定會存在差異,這該怎么辦呢?這就是我們本章的重點(diǎn),差異項(xiàng)的合并取舍問題。這里有點(diǎn)抽象,咱們上“代碼”。
這就類似于上面的初始版本:也就類似于一開始啥都不會,把你扔進(jìn)河里,你也會撲通的滑幾下,這就是本能行為。類似于下面的 breathing = 1.
A 在天生的基礎(chǔ)上進(jìn)行了矯正:
B 剛好也在天生的基礎(chǔ)上進(jìn)行了矯正:
大家想想一下,如果有人讓你把 A 和 B 的兩套代碼合并到一起,首先你必須找到不一樣的地方,然后做些特殊的手段,讓他們可以執(zhí)行兩個流程。而且,實(shí)際的代碼不同的地方很多,難以真正的看清,太費(fèi)時費(fèi)力了。讓我們來看看 git merge 這么強(qiáng)大的指令是如何幫助我們實(shí)現(xiàn)以下的過程的。
這樣子,我們就把 B 從初始版本到現(xiàn)在的所有修改內(nèi)容全部同步到 A 的上面去了,我們來看看 A 上面的效果。
git 在合并的過程中發(fā)現(xiàn)了難題,因?yàn)樗恢肋@兩段該怎么取舍,因?yàn)?A 和 B 都對他們做出了獨(dú)特的修改。但是 git 很聰明,它不會的東西,它就把這些內(nèi)容標(biāo)記下來,留給你去取舍或則做出兼容。自此,大家就對 git 為什么需要這么多分身有了大概的了解了吧。