上一篇和大家讲解了不用的时空之间来回穿梭,好了,这次我们讲讲关于不同时空中的你是如何产生关联的。比如,当前的你学会了做饭,如何将这个技能完完全全的复制给其他时空的“你”,瞬间让他们学会做饭?且看以下分解。
如上图,现在又三个不同分身,分别是 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 为什么需要这么多分身有了大概的了解了吧。