如何使用git 提交作业 收作业

如何使用git 提交作业 收作业

今天就来用一个通俗易懂的自然模型来解释Git的commit,pull和push。不过,我们首先要理解两个名词,remote,local。

remote,翻译成中文,就是远程。为了更便于理解,我们称之为远程(代码)库。

local,本地的意思。同理,谓之本地(代码)库。

把这两个名字回归到一个我们熟悉的自然模型。

remote,就是学校。local,为你自己家。

你写的代码,就是你写的作业。

commit,提交的意思。

pull,直译为拉取,更通俗的讲,获取。

push,推送。

那么每天放学之前,老师布置了今天的回家作业。从布置回家作业,到第二天交回家作业,经历了哪些过程呢。
首先你要知道老师布置了什么作业,作业有什么要求。也就是你需要明确你需要写哪些代码,用什么语言,完成什么具体的需求等等。

然后,你需要把你的回家作业拿回家。这一步,就是pull(获取)。

回家之后,勤奋的你鞋子都没脱,就打开了书包开始写作业。

一小时之后,你写完了作业。

接下来,就是把你写好的作业放在书包里,准备第二天交给在学校的老师。

把写好的作业放在书包里,这一步,就是git commit。

第二天早上,你高高兴兴的去上学,拿出你的作业,交给老师。这一步就是push(提交)。

一个简单的拿作业到交作业的流程就是这个样子的。

不过,Git这个版本控制软件当然没有这么的简单,下一篇文章我将分享如何理解branch,merge,rebase以及如何使用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。




参考:https://www.jianshu.com/p/0623cb42fcfa

猜你喜欢

转载自www.cnblogs.com/tsingke/p/9573948.html