• git使用笔记(十一)rebase


    By francis_hao    Oct 22,2017

     

    git-rebase,改变commit的基础参照

    概要

    git rebase [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
    git rebase [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
    git rebase --continue | --skip | --abort | --edit-todo

     

    描述

    branch:工作分支,默认指向HEAD,如果指定了branch,rebase会在做其他事情之前自动执行git checkout branch,若没指定则会保持在当前分支。

    upstream:要比较的上行分支,或者任何有效的commit,如果没有指定upstream,那么会使用配置文件里的branch.<name>.remote和branch.<name>.merge的值作为upstream

    --onto <newbase>:创建新commit的起点,如果没有指定该项,那么起点就是upstream

    当前分支会重置到upstream,或者newbase(如果指定了--onto选项的话),这个过程和git reset --hard的效果一样,然后在此基础上进行合并。

    一个简单的例子:

    当前分支在topic

    对应的关系图

    执行命令

    git rebase --onto master master topic

    分支变成了这样

    对应的关系图

    实际上这条命令概括起来就是:以master分支为参照,获取topic分支独有的内容(例中的b1和b2),再以新分支的形式合并到master(--onto指定)分支上去,也就是rebase的字面意思。

    根据上面提到的省略规则,该命令在上述情况下可以简写为

    git rebase master

    rebase不止运用在分支上,也可以用在一个分支的多次提交中,用于合并多次提交,但是命令的形式比较费解,一般都是用rebase的交互模式。

     

    交互模式

    当前分支上有若干commit

    指定你想保留的最后一个commt,并且进入交互模式

    git rebase -i <after-this-commit>

    会打开一个文件编辑器,内容大致如下

    修改后的内容,第一条不能是squash和fixup,因为必须有要依存的基础。

    之后按照默认的操作,就变成了这样,完成压缩

    其中第一列的命令可以是一下内容

    命令

    含义

    p, pick

    使用该条commit

    r, reword

    使用该条commit,但是修改提交信息

    e, edit

    使用该条commit,但是过程中会停下来以方便修改一些属性

    s, squash

    使用该条commit,但是会结合到以前的提交中

    f, fixup

    类似squash,但是会丢弃该条提交的记录信息

    x, exec

    使用shell运行命令

     

    常用选项

    选项

    含义

    --continue

    在处理了合并冲突后,重新开始rebase程序

    --abort

    终止rebase操作,并回到开始前的状态

    --skip

    跳过当前的patch并重新开始rebase程序

    --stat

    显示从上一次rebase之后的改变情况

      
      

    其他详情见参考【1】

     

     


    本文由 刘英皓 创作,采用 知识共享署名-非商业性使用-相同方式共享3.0中国大陆许可协议 进行许可。欢迎转载,请注明出处:
    转载自:http://www.cnblogs.com/yinghao1991/p/7712035.html

     

     

    参考

    【1】git help rebase

  • 相关阅读:
    Java修饰符/关键字
    深入理解Java面向对象三大特性 封装 继承 多态
    BUG为什么越改越多,越改越乱
    DDMS调试Virtual Box android虚拟机
    android开发之android虚拟机配置
    使用cordova 出现Error: The provided path is not Android project.
    Javascript与Flex AS3的交互
    [Ljava.lang.String; cannot be cast to java.lang.String错误
    使用Flex4的PopUpManager的addPopUp() 方法弹出 removeChild异常的解决办法
    Flex 4 不同主题下容器子元素的管理方法
  • 原文地址:https://www.cnblogs.com/yinghao-liu/p/7712035.html
Copyright © 2020-2023  润新知