cherry-pick,revert和rebase使用的3-way合并策略
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合并策略相关推荐
- idea cherry pick 功能 git log 窗口 冲突conflict
git log 窗口 参考 source tree cherry pick, merge conflict merge conflict 冲突 <<<<<<< ...
- git cherry pick
直接将选定的其他分支的commit,提交到该分支上 不建议使用 git rebase --onto 使用cherry pick代替 http://weblog.avp-ptr.de/20120928/ ...
- [gitsourcetree]cherry pick和遴选的使用
前言 cherry pick. 拷贝其中的某一次提交记录. 本文就介绍一种更加快捷的方式 cherry pick. 介绍 此方法主要用于2分支分别独立维护的情况, 即某一分支已经上线了spring-2 ...
- 在gerrit上cherry pick多笔提交到一个仓库中
我们的要求是在dvr_service仓库上从其他分支cherry pick 两笔提交到release/b03chn_rel_sop_3_nobo分支 这两笔提交分别如图所示 如图所示,B02-5746 ...
- 1.Cherry Pick与Create Patch的区别
Cherry Pick与Create Patch的区别 结论 实验 场景1:应用时无冲突 场景2: 应用时产生冲突 使用cherry pick 使用patch 场景3:产生冲突,并且有其他文件的变更 ...
- IDEA git cherry pick 简单使用
cherry pick的作用: 参考了一些博客, eg: 参考博客1 参考博客2 再做了个小案例后,我目前的理解是,cherry pick的作用是将一个分支的部分提交/历史提交,可以合并到另外一个分支 ...
- gerrit cherry pick to merge code
开发中经常遇到,不同branch代码需要同步修改的问题, 通过gerrit cherry pick to功能可以方便的将已提交A Branch 的修改同步到B Branch上,提升工作效率
- 【git cherry pick冲突】
修好了bug愉快的打算commit提交的时候 看到提示语句是can not commit changes due to unresolved conflicts 在Android Studio中寻找图 ...
- Git 企业开发者教程
为什么要写这样一个面向企业开发者的Git教程?这个问题也困扰我自己很久.其实我使用git的时间也不短了,但是就和正在阅读本文的每一位一样,常用的基本就是那么几个(git clone, git push ...
最新文章
- java 变量与常量_详解Java变量与常量
- oracle pl sql注意问题,Oracle PL/SQL编写PL/SQL代码的注意事项
- ios 旋转加载gif_加载GIF动画方法 iOS
- 【学习笔记】Sass入门指南
- 《机器人自动化:建模、仿真与控制》——2.3 仿真
- Hadoop常见错误解析
- python求近似值_python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配...
- Collaborative topic modeling(推荐)算法实现中的大数组问题
- Deep learning:十六(deep networks)
- Ubuntu系统安装vmwaretools时the path is not a valid path to the 3.13
- DBCC CHECKIDENT 和SET IDENTITY_INSERT table OFF
- Android Span 进阶
- android nfc模拟器,NFC Emulator下载
- 小米android截屏快捷键是什么原因,小米截屏快捷键是什么 如何快速截图快捷键...
- 02 华为交换机配置telnet远程登录
- 解决“更新pip版本竟将pip卸载了,提示No module named ‘pip‘”
- 扫雷——Windows上的经典小游戏
- 阿里云服务器使用freessl配置免费证书Nginx
- 原创科幻短篇《霾星》
- [游泳] 游泳学习课程