文档章节

Eclipse上GIT插件EGIT使用手册之九_Rebase和Merge的区别

明舞
 明舞
发布于 2015/04/27 10:46
字数 674
阅读 9
收藏 0
点赞 0
评论 0
 

Rebase和Merge操作最终的结果是一样的,但是实现原理不一样。

从上面的MairoBro例子可以知道pull大概对历史记录进行了怎样的合并操作,其实默认pull的操作就是一个分支的merge操作,如下图重现一下:

Mairo弟弟的提交记录如下:

Mairo哥哥的提交记录如下:

首先是Mairo弟弟把更新push到服务器,这样服务器端的记录就和Mairo弟弟本地的记录是一样的,接着Mairo哥哥执行pull操作,现在分析下pull是如何操作的。

l  pull默认就是先把服务器端的最新记录更新到本地的Remote Tracking中对应的mirror分支

l  接着对Local的mirror分支和Remote Tracking的mirror分支进行merge操作

Merge操作后的结果就是会新增加一个merge记录节点,如下所示:

从上图可以看出,mushroomA是在mushroomB之前的,这个时间关系不取决于谁先执行push,而取决于本地仓库中谁先执行commit。所以merge会按照时间顺序严格的记录每一次commit。

接下来看看rebase,其实rebase也是把两个分支进行合并的操作,当Mairo弟弟push更新后,服务器端的mirror分支的历史如下:

Mairo哥哥本地的历史如下:

现在Mairo哥哥不是执行merge操作,而是执行rebase操作,最后结果如下:

很明显的区别是没有出现分支的记录,而且注意到mushroomA*,请注意这个记录和mushroomA不是同一个记录,我们先分析下rebase操作下,Mairo哥哥的历史记录都做了哪些变化:

l  先将当前分支的更新部分保存到临时区域,而当前分支重置到上一次pull的记录

l  然后将服务器端的更新添加到当前分支,此时当前分支和服务器端分支是一样的

l  最后将原分支的更新部分mushroomA提交到当前分支的后面,就是要在mushroomB的后面添加mushroomA的更新,当然此时更新记录已经不是之前的mushroomA了,如果出现冲突则使用对比工具解决冲突,最后记录变成mushroomA*。

如果Mairo哥哥提交过mushroomA1、mushroomA2、mushroomA3,那么执行rebase后会对mushroomA1、mushroomA2、mushroomA3分别顺序执行上图所示的合并,最后记录为mushroomA1*、mushroomA2*、mushroomA3*。很显然rebase操作更复杂,冲突的概率也更高,并且不是按照时间顺序记录。

本文转载自:http://blog.csdn.net/pandakong/article/details/7233677

共有 人打赏支持
明舞
粉丝 227
博文 424
码字总数 516555
作品 0
程序员
Egit - Cannot checkout now - stuck in rebase state Ask

使用rebase时发生冲突,解决冲突后不知道怎么进行下去,下面链接很好的解决方法 https://stackoverflow.com/questions/34000319/egit-cannot-checkout-now-stuck-in-rebase-state 这是在sta...

wangwei2134
04/13
0
0
Eclipse上GIT插件EGIT使用手册

一_安装EGIT插件 http://download.eclipse.org/egit/updates/ 或者使用Eclipse Marketplace,搜索EGit 二_使用EGIT前的配置 配置个人信息,最重要的是user.name和user.email l Preference...

moz1q1
2014/08/14
0
0
Eclipse上GIT插件EGIT使用手册

一_安装EGIT插件 http://download.eclipse.org/egit/updates/ 或者使用Eclipse Marketplace,搜索EGit 二_使用EGIT前的配置 配置个人信息,最重要的是user.name和user.email l Preferences ...

吃鱼的虾米
2014/01/21
0
0
Git在eclipse中的配置详细记录

一_安装EGIT插件 http://download.eclipse.org/egit/updates/ 或者使用Eclipse Marketplace,搜索EGit 还有一个要说明的是如果使用:http://download.eclipse.org/egit/updates.来安装,则要保...

北方攻城师
2014/06/25
0
0
【软件使用】GitHub使用教程for Eclipse

【软件使用】GitHub使用教程for Eclipse 1.下载egit插件 打开Eclipse,git需要eclipse授权,通过网页是无法下载egit的安装包的。在菜单栏依次打开eclipse→help→install new software→add...

thinkyoung
2015/04/25
0
0
【ZZ】使用github管理Eclipse分布式项目开发

老关我在前面的博文(github管理iOS分布式项目开发)中介绍了github管理iOS分布式开发,今天老关将向大家介绍使用github管 理Eclipse分布式项目。事实上我们的516inc团队这在开发一个多移动平...

学徒1986
2013/09/09
0
0
在android的eclipse开发环境中配置git环境

我使用 egit 来管理eclipse中的android工程。 有篇文章比我的更清楚,请移步这里。 由于我是从android官网上下载的adt-bundle-windows-x86-20130219,这是一个集成了eclipse和ADT的开发环境,...

bbdlg
2013/03/20
0
2
Github管理Eclipse分布式项目

1.Eclipse中下载安装Egit插件; 2.创建代码仓库; 3.在Eclipse中使用Egit插件 1.使用eclipse 3.7安装egit插件 help->intall new software.. 在work with中输入:(这里选用的egit版本是2.3...

ksfzhaohui
2013/07/25
0
0
Eclipse Indigo 3.7.0 装配GIT插件提示 requires 'bundle or

eclipse git 插件安装: 出现如下提示: Cannot complete the install because one or more required items could not be found.Software being installed: Eclipse Git Team Provider 3.1.......

蒙奇D刘辉
2014/02/25
0
0
图解:Eclipse安装git插件EGit方法

1.Eclipse中有EGit插件来管理git版本库,首先安装EGit http://eclipse.org/egit/download/ 打开Eclipse,install new software, 在红框处写入地址,官方地址 http://download.eclipse.org/...

王雷
2011/11/23
0
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

217. Contains Duplicate - LeetCode

Question 217. Contains Duplicate Solution 题目大意:判断数组中是否有重复元素 思路:构造一个set,不重复就加进去,重复返回true,如果数据量大的话,可以用布隆过滤器 Java实现: publ...

yysue
6分钟前
0
0
istio 处理失败

Envoy提供了一套开箱即用的选择加入故障恢复功能,可以通过应用程序中的服务进行利用。功能包括: 超时 具有超时预算和重试之间的可变抖动的有界重试 限制并发连接数和对上游服务的请求 对负...

xiaomin0322
7分钟前
0
0
eclipse解决git冲突举例

本地修改了两个文件,提交时提示有冲突,想来应该是没有从远程仓库下载最新代码导致的。通过右击项目 -> Team -> Sychronized WorkSpace,比较本地仓库和远程仓库的异同:   此时没有更好的...

Code辉
16分钟前
0
0
运行.jar后缀的文件

前提必须安装了jdk,正确配置环境变量。 在dos窗口执行以下命令即可。 java -jar C:\Users\10492\Desktop\turn.jar

haha360
18分钟前
0
0
Java程序员如何做代码压力测试?【JWordPress前台项目实战】

代码 pom.xml文件引入包 <dependency><groupId>com.taobao.stresstester</groupId><artifactId>stresstester</artifactId><version>1.0</version></dependency> 编写测试代码 /**......

迷你芊宝宝
23分钟前
0
0
面试宝典-什么是缓存穿透?

缓存穿透是说收到了一个请求,但是该请求缓存里没有,只能去数据库里查询,然后放进缓存。 这里面有两个风险,一个是同时有好多请求访问同一个数据,然后业务系统把这些请求全发到了数据库;...

suyain
29分钟前
0
0
vue基础知识练习2

一、发送AJAX请求 <div id="demo1"><button @click="send">发送AJAX请求</button><button @click="sendGet">GET方式发送AJAX请求</button><button @click="sendPost">POST方式发送A......

一个yuanbeth
31分钟前
0
0
Xamarin Essentials教程磁力计Magnetometer

Xamarin Essentials教程磁力计Magnetometer 磁力计也叫地磁、磁感器,可用于测试磁场强度和方向。在手持设备中,通过磁力计可以计算设备的左右、前后倾斜角度,广泛应用于手机各种的应用中。...

大学霸
35分钟前
0
0
mesos:Authentication timed out

最近当slave开始慢慢部署异地集群的时候又碰上了这个问题 I0717 10:27:11.695762 28852 slave.cpp:895] New master detected at master@192.168.2.161:5050I0717 10:27:11.695811 28852 sl......

xueyi28
42分钟前
0
0
赋予用户库的读写权限

1、创建用户 CREATE USER 'test'@'%' IDENTIFIED BY '15ht46389012t'; #'%' - 所有情况都能访问;‘localhost’ - 本机才能访问;’192.168.1.2‘ - 指定 ip 才能访问 2、赋予权限 grant al...

xixingzhe
43分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部