欢迎来到五大联赛竞猜

面试官:说说你对Git Rebase 和 Git Merge的理解?区别?

正文:

本文转载自微信公多号「JS每日一题 」,作者灰灰 。转载本文请有关JS每日一题公多号。

一、是什么

在行使 git 进走版本管理的项现在中,当完善一个特性的开发并将其相符并到 master 分支时,会有两栽手段:

git merge git rebase

git rebase 与 git merge都有相通的作用,都是将一个分支的挑交相符并到另一分支上,但是在原理上却不相通

用法上两者也相等的浅易:

git merge

将现在分支相符并到指定分支,命令用法如下:

git merge xxx 

git rebase

将现在分支移植到指定分支或指定commit之上,用法如下:

git rebase -i <commit

常见的参数有--continue,用于解决冲突之后,不息实走rebase

git rebase --continue 
二、分析

git merge

经由过程git merge将现在分支与xxx分支相符并,产生的新的commit对象有两个父节点

倘若“指定分支”自己是现在分支的一个直接子节点,则会产生快照相符并

举个例子,bugfix分支是从master分支分叉出来的,如下所示:

相符并bugfix分支到master分支时,倘若master分支的状态异国被更改过,即 bugfix分支的历史记录包含master分支一切的历史记录

因此经由过程把master分支的位置移动到bugfix的最新分支上,就完善相符并

倘若master分支的历史记录在创建bugfix分支后又有新的挑交,如下情况:

这时候行使git merge的时候,会生成一个新的挑交,并且master分支的HEAD会移动到新的分支上,如下:

从上面能够望到,会把两个分支的最新快照以及二者比来的共同先人辈走三方相符并,相符并的效果是生成一个新的快照

git rebase

同样,master分支的历史记录在创建bugfix分支后又有新的挑交,如下情况:

经由过程git rebase,会变成如下情况:

在移交过程中,倘若发生冲突,必要修改各自的冲突,如下:

rebase之后,master的HEAD位置不变。因此,要相符并master分支和bugfix分支

从上面能够望到,rebase会找到差别的分支的比来共同先人,如上图的B

然后对比现在分支相对于该先人的历次挑交,挑取相答的修改并存为一时文件(老的挑交X和Y也异国被烧毁,只是浅易地不克再被访问或者行使)

然后将现在分支指向现在的最新位置D, 然后将之前另存为一时文件的修改挨次行使

三、区别

从上面能够望到,merge和rebasea都是相符并历史记录,但是各自特性差别:

merge

经由过程merge相符并分支会新添一个merge commit,然后将两个分支的历史有关首来

其实是一栽非损坏性的操作,对现有分支不会以任何手段被更改,但是会导致历史记录相对复杂

rebase

rebase会将整个分支移动到另一个分支上,有效地整相符了一切分支上的挑交

主要的益处是历史记录更添清亮,是在原有挑交的基础上将迥异内容逆映进往,清除了 git merge所需的不消要的相符并挑交

参考文献

https://zhuanlan.zhihu.com/p/361182707

https://yuweijun.github.io/git-zh/1-git-branching.html#_rebasing

https://backlog.com/git-tutorial/cn/stepup/stepup1_4.html

【编辑选举】

鸿蒙官方战略配相符共建——HarmonyOS技术社区 如何经由过程云坦然态势管理保障云端数据坦然和招架网络要挟 大数据不准网络坦然要挟的5栽可走手段 腾讯(T-Sec NTA)被列入Gartner最新发布的《新兴趋势:网络检测和反响的最佳用例》通知 AI网络钓鱼抨击即将成为现实 柔考网络工程师IDS/IPS深化训练视频课程
posted @ 21-09-16 01:40  作者:admin  阅读量:

Powered by 五大联赛竞猜 @2018 RSS地图 HTML地图