1.有趣的变基例子

如下图所示,你创建了一个特性分支server,然后进行了一些提交(C3和C4),然后又从C3上创建了特性分支client,提交了C8和C9,最后你又回到了server,提交了C10。
现在你的分支提交情况如下图所示:

假设你希望将client中的修改合并到master,但是server分支中的修改不希望合并到master中,往往它们还需要经过测试,你可以使用git rebase --onto命令。

git rebase --onto master server client 

**这条命令会取出client分支上的与server分支上的共同祖先之后的修改(也就是C8,C9),然后将它们在master分支上重放一遍。**执行完成之后,分支情况如下图所示:

现在client就可以快速合并(fast forward)进master分支了。执行以下命令:

git checkout master
git merge client

结果如下:

在测试完成之后,合并server分支:如下命令:省掉了切换到server分支的步骤,可以直接将server分支上的提交rebase到master上

git rebase master server

结果如下:

同样进行快速合并server分支:

git checkout master
git merge server

现在你client和server分支上所有的提交都已经合并到了master分支中,你就可以删除这两个分支了。

git branch -d client
git branch -d server

最终提交历史的样子:

2.rebase带来的问题

如果你对已经推送到远程仓库的提交,进行了回滚,然后进行了变基操作,最后又强制提交到了远程仓库(git push --force)。这会给其他已经拉取了你的提交的开发者带来比较头疼的问题。
如果你执行了上述操作,记得告诉其他的协作者,使用:

git pull --rebase
等价于:
git fecth
git rebase <被你强制推送的变基分支>

上述命令,在一个被变基然后强制推送的分支上再次执行变基。
这样基本能够解决变基带来的问题。

14.Git分支-rebase有趣的例子、变基带来的问题及解决方案的更多相关文章

  1. Git教程(7)用合并还是变基?

    合并或变基前的样子:分支experiment与master两个分支都产生了提交. 图1. 未合并或变基前的样子 合并 原理: 找到两个分支的最末提交和最近的共同祖先,在执行git merge时所处的分 ...

  2. git rebase 版本。。变基

    git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态.要搞清楚这个东西,要先看看版本库状态切换的两种情况: 我们知道,在某个分支上,我们可以通过git ...

  3. Git知识总览(四) git分支管理之rebase 以及 cherry-pick相关操作

    上篇博客聊了<Git知识总览(三) 分支的创建.删除.切换.合并以及冲突解决>,本篇博客我们主要来看一下 rebase 变基相关的操作.rebase 操作和 merge 操作最终都可以达到 ...

  4. git rebase(变基)操作

    1.rebase(变基)操作 注意事项:rebase 改变分支的根源,绝对不要在与其他人共享的分支上进行操作rebase黄金法则:绝不要在公共的分支上使用它! 1.1git merge 与 git r ...

  5. 三、Git 分支

    使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线.有人把 Git 的分支模型称为它的`‘必杀技特性’',也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出. 1.分支简介 ...

  6. git变基、冲突解决

    参考git rebase 版本..变基 git冲突解决先fetch,pull,如果文件冲突,手动处理冲突文件,然后再fetch,pull,发现拉不下来,这时需要将文件改为已合并,然后提交文件 具体操作 ...

  7. Git知识总览(六) Git分支中的远程操作实践

    前几篇博客陆陆续续的讲了好多关于Git操作的内容,本篇博客仍然也不例外,不过本篇博客的主题是关于git的远程操作的.依照之前博客的风格,我们依然依托于LearningGitBranch中的相关内容来探 ...

  8. Git分支中的远程操作实践

    Git分支中的远程操作实践 前几篇博客陆陆续续的讲了好多关于Git操作的内容, 其中在上篇博客聊了<Git中的merge.rebase.cherry-pick以及交互式rebase>,本篇 ...

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

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

随机推荐

  1. 2018-2019-2 网络对抗技术 20165239 Exp2 后门原理与实践

    一.实验要求 (3.5分) (1)使用netcat获取主机操作Shell,cron启动 (0.5分) (2)使用socat获取主机操作Shell, 任务计划启动 (0.5分) (3)使用MSF met ...

  2. iOS 轻击、触摸和手势的检测

    一.检测捏合手势( UIPinchGestureRecognizer):  //设定一个实例变量存储手指之间的其起始距离 @property (assign, nonatomic) CGFloat i ...

  3. 修改 bug 总结

    对于 elementui table 组件的排序 要求对每列数据进行排序 数据是 金额之类 数字的没问题 但是 针对 标题中有数字,字母,文字的时候 会排序错误 :sort-method=" ...

  4. spring为什么推荐使用构造器注入?

    闲谈 ​ Spring框架对Java开发的重要性不言而喻,其核心特性就是IOC(Inversion of Control, 控制反转)和AOP,平时使用最多的就是其中的IOC,我们通过将组件交由Spr ...

  5. 我的 FPGA 学习历程(10)—— 实验:数码管驱动

    根据黑金 AX301 手册,数码管位选信号命名为 SEL[5:0],其中 SEL[5] 对应最左边的数码管,而SEL[0] 对应最右边数码管:作为约定,在下面的描述中我们对应的称之为数码管 5 和数码 ...

  6. 三色GDOI

    前面说点什么.. 翻了翻别人的游记.. 发现自己从来没写过gdoi的游记.. 那就.. 一起写完它吧.. GDOI2015 肇庆 没啥印象,只有复联2的首映.. 那时候真的是什么都不懂.. 就是外出打 ...

  7. Android SQLite数据库升级,怎么做(事物更改)

    SQLiteOpenHelper // 如果数据库文件不存在,只有onCreate()被调用(该方法在创建数据库时被调用一次) public abstract void onCreate(SQLite ...

  8. MicroSoft CryptoAPI data/file encrypt/decrypt

    linux 用第三方库 Crypto++, 还未实战. CryptoAPI使用两种密钥:会话密钥与公共/私人密钥对.会话密钥使用相同的加密和解密密钥,这种算法较快,但必须保证密钥的安全传递.公共/私人 ...

  9. C#线程--5.0之前时代(一)--- 原理和基本使用

    一.开篇概念明晰: 多任务: 协作式多任务:cpu可以处理多种任务,但是这些任务是排队等候的,当cpu在处理一个任务的时候,其他的任务被锁定,只有当cpu处理完当前任务,才可以继续处理下一个任务(专一 ...

  10. 数据安全存放,全民搭建kodexplorer私有云存储

    数据安全存放可以说越来的重要,新闻上也经常报道出关于个人信息泄露的事件,不仅泄露,还有一些进行个人隐私买卖,之前报道出facebook便是如此.数字信息存放好比存钱一样,存在别人那里总会不放心.不如自 ...