zoukankan      html  css  js  c++  java
  • 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 System.getProperty vs System.getenv
    Bring JavaScript to your Java enterprise with Vert.x
    es4x 引用外部jar 包以及集成typescrip
    cube.js 最近的一些更新
    es4x 调用其他三方jar 包
    graalvm native image 试用
    es4x 使用nodejs 开发vertx 应用框架试用
    clojure 环境搭建
    restql 学习三 查询语言简单说明
    restql 学习二 几种查询模式
  • 原文地址:https://www.cnblogs.com/yinghao-liu/p/7712035.html
Copyright © 2011-2022 走看看