Osheep

时光不回头,当下最重要。

TO有话说[5]-Git之大家一起来写作业

《TO有话说[5]-Git之大家一起来写作业》

作业线

这篇文章,接TO有话说[2]-Git与拿作业、交作业

那么,今天我们来思考,如何用Git让大家共同完成一份作业,也就是写一个程序。

首先,引入Git的branch概念。

之前的举的一个写作业的例子,我们现在来拓展一下这个模型。

学校里不可能只有你一个学生,你的班级里不可能只有你一个学生。

学校,可以理解成你的公司。班级,你所在的部门。学生,软件工程师(程序员)。

每个人都会push自己写好的作业,那么我们如何把不同人写的作业的过程(也就是代码提交的修改,还记得我们的第一节说的吗)清晰的显示出来呢。很简单,把不同人写的作业分开来放呗。

比如,张三写的一本本作业(一次次代码修改)放在一条线上,称这条线为zhangsan,贴一个zhangsan的标签。

李四写的一本本作业(一次次代码修改)放在zhangsan这条线的在地板这个平面的一条平行线上,称这条线为lisi,在这条线上贴一个lisi的标签。。

这分开的两条线,就是两个branch。

张三可以在zhangsan这条线上放上(push)自己的作业,李四可以在lisi这条线上放上(push)自己的作业,两条线之间可以互相不冲突。

当然,最后,老板(或者你的上司)会将作业写的好人的作业放在红榜上进行表扬。那么我们就需要一条线来放置老板认为质量最好的作业,对吧?我们称这条线为master,也就是我们的主线,这里放着写的质量最高的作业。

有了这条线,接下来我们是不是要把最好的作业放到master上呢?

而在Git中,完成这个操作有两种方式。一个是merge,一个是rebase。

我们先来弄清楚merge。

大家应该都已经懂了,我们每次都commit,都是一次代码的改动,那么多次代码的改动,当然可以变成一次改动,也就是将多次commit合并。多个commit与这多个commit合并所得的commit,是等价的。

张三把多次commit合并,变成了一个commit,然后把这次commit,合并到master这个branch上。这个操作就是merge zhangsan into master,这样会导致master这个branch只多一个commit。这个commit可能是多次commit的一次合成。Merge这个操作,就是将zhangsan这个branch相对于master的修改,在master上也进行了一次等价的修改。

那么这样zhangsan和master其实是一样的了,所以我们其实只需要一条线了,对吧。然后在这条线上贴上两个标签,zhangsan和master。

那么什么是相对于master的修改?

这里需要解释一下。假象一下,master这个branch上的作业(代码)是星期六的作业了。zhangsan这个branch在此时和master这个branch是一模一样的。你(比如你是zhangsan)星期天在你的branch commit并push了。那么相对于master这条branch,zhangsan这个branch有了星期日的作业,也就是相对于master有了修改。

那么什么是rebase?

同样的,有了相对的修改。

rebase,与merge不同,不会将多次commit合成一个commit。

而是将相对的修改直接抄过去。比如rebase master on lisi,就是将lisi这个branch相对于master的修改直接抄上去了,而且是一个commit一个commit的抄,那就会在master上留下多次commit。

其后面的本质其实是这样的,先将lisi这个branch相对于master的修改截取下来,保存在一个地方。此时lisi和master是等价的了。也就是一条线2个标签,然后这时把我们刚刚保存起来的修改,一个一个的放在master这条线上。

这就是rebase。

好了,下一次我将阐述如何抄别人的作业和怎么让老师知道你是谁,你在哪里写的作业。

点赞