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