Git超详解五 变基 (看不懂算我输)
变基
- 1.变基
- 2.基本操作
- 3.解决冲突
- 4.什么时候使用变基
- 5.注意事项
1.变基
- 变基也是将一个分支的代码整合到另外一个分支。跟merge功能类似,但也存在着很大的不同。变基可以把提交线整合得更加是一条直线。
2.基本操作
假如有这样一个提交图
然后我们把dev分支合并到master分支后,结果图为:
以上是采用正常的merge操作实现的结果。还有另外一种方式,可以将dev上的代码合并到master分支上。那就是变基。变基命令为git rebase。命令如下:
$ git checkout dev
$ git rebase master
- 原理是,先找到两个分支的共同祖先,然后获取这两个祖先后面提交的diff(不同内容),保存为临时文件,然后再创建一个commit,把这些diff进行提交。再把当前的分支指向最新的提交。示例图如下:
- 这时候已经新生成了一个新的commit。并且dev已经指向了这个commit。我们的目的是要把dev分支上的代码合并到master分支上,在这里我们还需要执行merge操作。命令如下:
$ git checkout master
$ git merge dev
到现在为止,我们通过merge和rebase得到的结果都是一样的,就是都把代码合并到master分支上了。
不管是变基操作后最新的提交,还是合并操作后最终的合并提交,这两个提交的快照内容是完全一样的,这两种操作的结果区别只是得到的提交历史不一样。总结一下,变基操作是把某条开发分支线上的工作在另一个分支线上按顺序重现。而合并操作则是找出两个分支的末端,并把他们合并到一起。
3.解决冲突
- 在产生冲突的时候,我们先解决冲突。然后做一个
git add .
, - 接着再执行
git rebase --continue
操作, - 再回退到
master
分支,执行git merge dev
操作。
4.什么时候使用变基
1.看公司的策略。有的公司认为提交历史就是实际发生过的事件的记录。它是一个记载着历史的“史书”,自有其价值,而且不能随意篡改。从这个角度来说,是不允许更改提交历史,也就不能使用变基了。
2.还有另外一个角度是,提交历史是关于项目如何被构建的故事。就像我们写的软件,一定是整理好了才发出去,使得后来的人能够更好的理解项目的构建。这时候就推荐使用变基。
5.注意事项
千万不要在协作的分支上(比如dev/master)上使用变基,否则会变得非常乱!
我们可以在自己的分支上,把代码变基到协作分支上,这样既不影响和别人的协作,也可以让自己的分支更加的简洁(也要看自己的喜好)。
Git超详解五 变基 (看不懂算我输)相关推荐
- 运筹优化学习15:求解线性规划的单纯形法【手把手计算,够你应付考试了,看不懂算我输】
目录 1 理论部分 1.1 单纯形表的要素含义解释 1.2 计算步骤 2 计算示例 2.1 初始单纯形表 2.2 第二次变换 2.3 第三次变换 2.4 第四次变换 3 参考文档 本博主研究了一天没有 ...
- 【每日一算法】KMP算法,看不懂算我输!
微信改版,加星标不迷路! 每日一算法-KMP算法详解 作者:poll的笔记 阅读目录 1 字符串匹配 2 KMP算法 1 字符串匹配 字符串匹配是计算机的基本任务之一. 字符串匹配是什么?举例来说,有 ...
- 读者写者问题(超详细讲解)看不懂算我输
文章目录 读者写者问题 读者优先 1.初始化 2.写者 3.读者 写者优先 1.初始化 2.读者 3.写者 4.考虑读者1->写者1->读者2的情况 读者写者问题 1.允许多个读者可以同时 ...
- 设计模式:简单工厂模式(C++)【看不懂算我输】
简单工厂模式介绍 简单工厂模式并不是Gof四人帮搞的23中设计模式中的一种,只不过大部分的设计模式书籍都会介绍它.所有我们还是来看看它,或许你觉得很简单.但是我们可以瞧瞧它有什么优点和缺点.如何进行改 ...
- 动漫:史上最简(详细)KMP算法讲解,看不懂算我输!
刚关注阿广的朋友们可能不太了解我 我也做个自我介绍 不客气的讲 通过下面的小细节 你也可能体会到阿广一个什么样的人了 (以上为凑字数够300字发原创) 所以公共前后缀的条件为: 1.最长的前后缀 2. ...
- 初中生也能看懂的狭义相对论(1.世界是什么?)(原子,质子和分子)(看不懂算我输)
世界是什么?对于这个问题人类给出了无数种答案,列一些有代表性的: 佛:是浮云 老子:是虚无 泰勒斯:是水 毕达哥拉斯:是数 留基伯和德谟克利特:是原子 中国古代人民:金木水火土 这些答案都各有各的特点 ...
- 简述TCP三次握手,看不懂算我输!
TCP 三次握手 举个例子简单描述下TCP的三次握手: 就举打电话的列子吧. TCP三次握手就是如此. 通过彼此之间发送三个包(过程就如上面对话一样),来确认client与server之间连接是否互通 ...
- java的renameTo函数的两个用法,这个看不懂算我输
查了网上关于renameTo的用法没找到一个说明白的,有的说的也晦涩难懂,我就总结一下: 一共两个常用的用法: 对文件进行重命名 此动作限定在同一个文件夹,即file1.renameTo(file ...
- Git 原理详解及实用指南
Git 原理详解及实用指南 什么是版本控制系统(VCS) 很多人认为 Git 难以理解的第一个门槛在于:所谓的「Git 是一个分布式版本控制系统」这句话的具体含义不够清楚.其实分布式版本控制系统(Di ...
最新文章
- 数据库SQL语句学习笔记(3)-排序检索数据
- 已解决:虚拟机无法获取所有权
- zsh: command not found: nvm 解决方案
- 光栅图形学算法基础其二 (裁剪算法)
- 自学hadoop(三)
- JAVA:hotspot 虚拟机的server和client模式
- 自动控制原理第3章——时域分析法(思维导图)
- Redis可视化客户端管理及监控工具TreeNMS
- Python用pyecharts绘制中国各地级市gdp分布点图
- 《非洲归来 不必远方》读后感
- 100个在线生信小工具
- Java学习笔记-不定时更新
- Proxmox VE桌面虚拟化
- Bitmovin首席执行官Stefan:开发者正在构建视频产品的未来
- Java学习--多线程案例--模拟火车票销售(线程安全问题)
- ensp模拟器使用USG6000V防火墙模拟搭建点到点的IPSec 隧道(web网页版)
- 算法训练 Beaver's Calculator
- 【网络运维与安全岗位】月薪2.5w,您还不知道的前景!
- 3周个人错误和知识弱点盲点{随时更新}
- ROCKET PROPULSION ELEMENTS——DEFINITIONS AND FUNDAMENTALS笔记
热门文章
- 渗透测试培训必会工具xray扫描器的使用(一)
- 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列
- unity资源包分享
- 狂奔的方便速食,跑不到风口终点
- 利用jQuery实现ajax下载文件时进度条
- 华为g9显示无服务器,华为手机连不上电脑_华为p9手机连不上电脑
- 【数据库】mysql执行计划
- 自动化测试 | 如何选择半导体测试系统——你不得不知道的事
- 草图大师自带模型库在哪里_大师在20分钟或更短的时间内创建您的第一个神经网络模型...
- Java 调用 Apache POI 往 Excel 插入图片