git中的cherry-pick,revert和rebase都使用的是3-way合并策略,下面就来看看这3个方法使用的merge-base,ours和theirs分别是什么。

cherry-pick

  假如有如下的提交历史,使用命令git cherry-pick alt(当前branch是master),那么merge-base就是加阴影的commit 1,ours就是加阴影的commit 3,theirs就是加阴影的commit 2。

revert

  假如有如下提交历史,使用命令git revert master~2,那么merge-base就是加阴影的commit 1,ours就是加阴影的commit 3,theirs就是加阴影的commit 2.

rebase

  假如有如下提交历史,每一个提交都向一个文件a里面增加一行,比如commit 1向文件a里面写入1,commit 2向文件a里面写入2,依次类推。使用命令git rebase --onto master alt1 alt2时,merge-base,ours,theirs分别是什么呢?

当使用rebase命令时,git如做如下3件事:

1 确定要rebase的commit是什么,这里要rebase的commit就是alt1..alt2。alt1..alt2表示从alt2可reachable的commit当中减去从alt1同样可以reachable的commit,这里就是commit 10,commit11,commit12;

2 使用一个匿名branch指向alt2

3 将alt2 reset到新的base,即master

如下图所示:

接下来git会依次将commit 10,commit 11, commit 12 rebase到新的alt2上。如果在rebase commit 10发生了冲突,那么merge-base就是commit 6,ours就是alt2指向的commit 5,theirs就是commit 10。如果commit 10 rebase成功后的commit记为commt 10’(此时alt2会指向commit 10'),接下来rebase commit 11如果也发生了冲突,那么merge-base同样是commit 6,ours是commit 10',theirs是commit 11。当rebase完成之后如果所示:

由于rebase之后commit 10,commit 11,commit 12没有被任何分支引用,它们最后会被git移除。

rebase有一个特殊的情况如下图所示:

如果运行命令git rebase --onto master alt1 alt2,要被rebase的commit应该是alt2上的commit 7,commit 8, commit 10,但是由于alt1(在git rebase --help中,alt1被称为upstream),上面也有commit 7和commit 8,它们对文件a所做的修改时一样的,这时,git只会rebase alt2上的commit 10,相应merge-base也会成为alt1上的commit 8,最后的结果如下图,rebase完成之后,虚线框中的commit 7,commit 8, commit 10同样会被git移除。

转载于:https://www.cnblogs.com/chaoguo1234/p/5351497.html

cherry-pick,revert和rebase使用的3-way合并策略相关推荐

  1. idea cherry pick 功能 git log 窗口 冲突conflict

    git log 窗口 参考 source tree cherry pick, merge conflict merge conflict 冲突 <<<<<<< ...

  2. git cherry pick

    直接将选定的其他分支的commit,提交到该分支上 不建议使用 git rebase --onto 使用cherry pick代替 http://weblog.avp-ptr.de/20120928/ ...

  3. [gitsourcetree]cherry pick和遴选的使用

    前言 cherry pick. 拷贝其中的某一次提交记录. 本文就介绍一种更加快捷的方式 cherry pick. 介绍 此方法主要用于2分支分别独立维护的情况, 即某一分支已经上线了spring-2 ...

  4. 在gerrit上cherry pick多笔提交到一个仓库中

    我们的要求是在dvr_service仓库上从其他分支cherry pick 两笔提交到release/b03chn_rel_sop_3_nobo分支 这两笔提交分别如图所示 如图所示,B02-5746 ...

  5. 1.Cherry Pick与Create Patch的区别

    Cherry Pick与Create Patch的区别 结论 实验 场景1:应用时无冲突 场景2: 应用时产生冲突 使用cherry pick 使用patch 场景3:产生冲突,并且有其他文件的变更 ...

  6. IDEA git cherry pick 简单使用

    cherry pick的作用: 参考了一些博客, eg: 参考博客1 参考博客2 再做了个小案例后,我目前的理解是,cherry pick的作用是将一个分支的部分提交/历史提交,可以合并到另外一个分支 ...

  7. gerrit cherry pick to merge code

    开发中经常遇到,不同branch代码需要同步修改的问题, 通过gerrit cherry pick to功能可以方便的将已提交A Branch 的修改同步到B Branch上,提升工作效率

  8. 【git cherry pick冲突】

    修好了bug愉快的打算commit提交的时候 看到提示语句是can not commit changes due to unresolved conflicts 在Android Studio中寻找图 ...

  9. Git 企业开发者教程

    为什么要写这样一个面向企业开发者的Git教程?这个问题也困扰我自己很久.其实我使用git的时间也不短了,但是就和正在阅读本文的每一位一样,常用的基本就是那么几个(git clone, git push ...

最新文章

  1. java 变量与常量_详解Java变量与常量
  2. oracle pl sql注意问题,Oracle PL/SQL编写PL/SQL代码的注意事项
  3. ios 旋转加载gif_加载GIF动画方法 iOS
  4. 【学习笔记】Sass入门指南
  5. 《机器人自动化:建模、仿真与控制》——2.3 仿真
  6. Hadoop常见错误解析
  7. python求近似值_python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配...
  8. Collaborative topic modeling(推荐)算法实现中的大数组问题
  9. Deep learning:十六(deep networks)
  10. Ubuntu系统安装vmwaretools时the path is not a valid path to the 3.13
  11. DBCC CHECKIDENT 和SET IDENTITY_INSERT table OFF
  12. Android Span 进阶
  13. android nfc模拟器,NFC Emulator下载
  14. 小米android截屏快捷键是什么原因,小米截屏快捷键是什么 如何快速截图快捷键...
  15. 02 华为交换机配置telnet远程登录
  16. 解决“更新pip版本竟将pip卸载了,提示No module named ‘pip‘”
  17. 扫雷——Windows上的经典小游戏
  18. 阿里云服务器使用freessl配置免费证书Nginx
  19. 原创科幻短篇《霾星》
  20. [游泳] 游泳学习课程

热门文章

  1. 请大家访问另一个我的博客!
  2. LeetCode OJ -- Binary Tree Paths
  3. python下selenium模拟浏览器常见操作
  4. Java机器学习库ML之二Feature Selection(特征选择)
  5. Ubuntu图形界面配置开机自启动
  6. Python学习二——变量和简单数据类型
  7. Manage Common Field Service Jobs
  8. 创建web服务器||HTTP协议的概念||报文||HTTP请求与响应处理——未完待续
  9. select下拉框兼容写法
  10. 23种设计模式(上)