目录

  • rebase的几个操作

  • rebase与merge的比较和实际操作

  • 结合动图加深理解rebase

 

1.rebase的几个操作

  • git rebase [分支名]
  • git rebase --continue 继续rebase
  • git rebase --abort 放弃本次rebase

 

2.rebase与merge的比较和实际操作

相比较于git merge,我们在初级篇已经学习过merge操作,每次使用merge合并分支时候,会将两个分支又合到一条分支上,这样造成的问题就是在一个git分支树上好多交叉,如果你希望commit的时候不要出现分支,可以使用rebase替代

我们新建一个git项目,然后创建一个空的test.js文件并commit,这时候的分支图是这样的



接下来我们在master分支修改test.js文件并commit,然后创建一个分支branch1,并在branch1上修改test.js文件,并提交。然后我们看下分支图

如果这时候我们在master分支合并branch1的话

git checkout master
git merge branch1

打叉了!打叉了!打叉了!

ok,我们回退到上一个版本,回退后分支是这样的

试下使用rebase的效果,进行如下操作

git checkout branch1
git rebase master



报了个错,说rebase的时候有冲突,那么我们vim test.js冲突的地方修复,然后执行下面

git add .
git rebase --continue // 继续rebase (同时普及一下另外一个git rebase --abort 放弃本次rebase)

这个时候分支是这样的:

然后我们回到master,去merge branch1(这样的目的是因为能从上图看到,master所指向的位置靠后了,要将其更新到最前面)

git checkout master
git merge branch1

 

3.结合动图加深理解rebase

git merge branch1

git checkout branch1
git rebase master

git checkout master
git merge branch1



为什么需要再branch1上rebase而不是在master上直接rebase?看下图

总结

其实就从字面意思来理解在branch1上git rebase master就是说把branch1的基准重新定位到master分支指向的最新一次commit处,

git高级浅入之rebase与merge差异的更多相关文章

  1. git初级浅入其常用操作

    1. git init 我们从初始化一个仓库开始,通过此命令可以初始化一个仓库 git init 首先我们在当前目录下创建一个目录pratice和一个文件test.js mkdir pratice c ...

  2. 13.Git分支-变基(rebase)、rebase VS merge

    1.变基的基本操作 在Git中整合来自不同分支的修改主要有两种方法:merge和rebase. 看下面的例子: 开发任务分叉到了两个不同的分支,并且都有了新的提交. 这时候我们可以使用 git mer ...

  3. Git:pull --rebase 和 merge --no-ff

    首先是吐嘈 如果你正在 code review,看到上图(下文将称之为:提交线图)之后,特别是像我这样有某种洁癖的人,是否感觉特别难受?如果是的话,请看下文吧 :) 为什么 Git 作为分布式版本控制 ...

  4. git之rebase、merge和cherry pick的区别(面试常问)

    git flow图例镇楼 merge 这个简单,初学者常用.比如主分支是Dev,最新版本是01.然后小明基于此,搞了个feature 分支A,业务:打酱油.然后在上面多次提交,完成功能迭代开发,如A1 ...

  5. Git版本控制:Git高级教程

    http://blog.csdn.net/pipisorry/article/details/50669350 Git有很多命令行参数,使用起来非常方便.可以运行 man git log ,来看一下这 ...

  6. Git / 程序员需要知道的12个Git高级命令

    众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...

  7. 你需要知道的12个Git高级命令

    众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...

  8. 你需要知道的12个Git高级命令【转】

    转自:http://www.linuxidc.com/Linux/2016-01/128024.htm 众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git, ...

  9. 包学会之浅入浅出Vue.js:结业篇(转)

    蔡述雄,现腾讯用户体验设计部QQ空间高级UI工程师.智图图片优化系统首席工程师,曾参与<众妙之门>书籍的翻译工作.目前专注前端图片优化与新技术的探研. 在第一篇<包学会之浅入浅出Vu ...

随机推荐

  1. 如何获取codeforces的完整数据

    推荐: 如何获取codeforces的完整数据?(玄学方法) http://www.cnblogs.com/Saurus/p/6220513.html

  2. Java IO 类一览表

    下表列出了大多数(非全部)按输/输出,基于字节或字符划分的 Java IO 类.

  3. oracle:delete和truncate

    oracle中清空表数据的两种方法 1.delete from t 2 .truncate table t 区别: 1.delete是dml操作:truncate是ddl操作,ddl隐式提交不能回滚 ...

  4. jquery的json对象与字符串之间转换

    json对象----- >>字符串 JSON.stringify(obj) json字符串------>>json对象 JSON.parse(string) 公众号 欢迎关注我 ...

  5. JIRA项目管理搭建

    部署JIRA 7.2.2 for Linux 转自:http://www.yfshare.vip/2017/05/09/%E9%83%A8%E7%BD%B2JIRA-7-2-2-for-Linux/ ...

  6. bzoj千题计划185:bzoj1260: [CQOI2007]涂色paint

    http://www.lydsy.com/JudgeOnline/problem.php?id=1260 区间DP模型 dp[l][r] 表示涂完区间[l,r]所需的最少次数 从小到大们枚举区间[l, ...

  7. WebSockets Tutorial(教程一)WebSockets简介

    一.WebSockets简介 以字面意思来说,握手可以被定义为两个人抓住和握手右手,象征着问候,祝贺,同意或告别.在计算机科学中,握手是确保服务器与客户端同步的过程.握手是Web Socket协议的基 ...

  8. 干货:制作科研slide简明规范

  9. MySql数据库资料收集

    1.下载MySQL历史版本 https://downloads.mysql.com/archives/community/ https://downloads.mysql.com/archives/i ...

  10. 关于Asp.Net中的编程实现下载

    经常在论坛看见有人求Asp.Net中编程实现下载的代码,有些还希望能断点续传什么的.其实问题的关键在于权限.B/S和C/S不仅仅是外观上的区别而已. 下载,顾名思义是客户端要下,所以载.你硬塞給人家那 ...