当前位置: 首页 > Linux

【笨叔比特5】gitrebase和gitmerge有什么区别?

时间:2023-04-07 01:32:05 Linux

》我的数学一直很好,上次暗恋的妹子问我:你不是数字吗?我问你一个问题,1+9+0=?。这么简单这个问题对我来说很难,所以我随便说了一个答案:10。然后她哭着跑了,说:你活该,因为你没有女朋友。这几天怪兽的朋友圈被长生怪霸占了,大家可以留言上面的笑话,妹子想表达什么?可能大家都知道git这个生物,它是被创造出来的Linux的祖父,短短十年就占据了代码版本管理软件的头把交椅,就连强大的微软也开始偷偷使用git了,你说git的开发速度和cell不相上下复制。大家都知道git天生就喜欢分支,所以分支管理的一个重要方面就是分支合并。git提供了两种合并分支的命令,一个是gitmerge,一个是gitrebase,它们有什么区别?01什么是区别是什么?我们假设在一个git仓库中有一个master分支,也有一个dev分支,如下图ABCDEFG上面的节点(每个节点为一个commit)按时间顺序提交,如下图table.节点提交时间节点提交时间A7月1日B7月2日C7月3日D7月4日E7月5日F7月6日G7月7日即:master分支上:A->B->C->E有4个dev分支上的节点:A->B->D->F>G这5个节点分别代表一个commit。那么如果执行下面两条命令:$gitmergemaster$gitrebasemaster以上两条命令都是将master分支合并到当前分支,那么结果有什么区别呢?让我们先看看合并命令。gitmergemaster命令后,dev分支变成如下图。我们可以看到执行gitmergemaster命令后,dev分支上的commit按照时间轴进行了合并。如果我们执行gitrebasemaster命令会发生什么?gitrebase命令用于更改基于该分支的一系列提交。例如,gitrebasemaster将dev分支的三个提交D、F、G建立在最新的master分支上,即建立在提交E上。gitrebase的一个常见用途是使您正在开发的分支(例如dev分支)相对于另一个分支(例如master分支)保持最新。02做实验不如做实验。比如我们在本地搭建一个git,在master分支上创建如下节点。master分支上有4个节点ABCE。接下来,我们在dev分支上创建ABDFG的五个节点,如下图所示。那么我们现在已经搭建好了master分支和dev分支,下面就可以开始实验了。让我们先试试gitrebasemaster。$gitcheckoutdev$gitrebasemaster上面的命令执行完后,我们来看一下dev分支。执行结果是否和我们预期的一样。dev分支和master分支是从节点Bfork出来的,rebase命令会让当前分支(dev分支)节点DFG的三个节点从master节点的最后一个节点E开始增长,所以在这个命令之后,devbranch最终的结果是A->B>C->E->D->F->G我们来看看gitmergemaster命令。$gitcheckoutdev$gitmergemaster最后的执行结果如下:和我们的prefetch是一样的。merge后的结果如下:A->B->C->D->E->F->G->mergenode03总结一下,merge和rebase命令是用来合并分支的,所以什么时候去使用merge命令那么rebase命令呢??当需要合并其他人的修改时,可以考虑使用merge命令,比如项目管理中需要合并其他开发人员的分支。?当你的开发工作或提交的补丁需要基于某个分支时,使用rebase命令,比如向Linux内核社区提交补丁。