zoukankan      html  css  js  c++  java
  • 14.Git分支-rebase有趣的例子、变基带来的问题及解决方案

    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 <被你强制推送的变基分支>

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

  • 相关阅读:
    神奇的flex布局
    reset、revert、rebase
    Vue.filter过滤器
    moment.js时间格式化总结
    Vue之组件大全
    过滤器filter
    Vue之animate
    Vue之axios
    Mac OS系统上测试PHP代码前的准备工作 | 使用XAMPP搭建Apache服务器的步骤
    Python中的标识符、关键字、变量、语句、注释、模块
  • 原文地址:https://www.cnblogs.com/wangwenhui/p/10704740.html
Copyright © 2011-2022 走看看