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

最新文章

  1. C# 使用线程池,设置每个线程的执行时间,过了时间强制结束
  2. [CareerCup] 5.4 Explain Expression ((n &amp; (n-1)) == 0) 解释表达式
  3. Git之路--1
  4. jQuery中的类型判断
  5. 让浏览器支持 jquery ajax load 前进、后退 功能
  6. STM32F407的串口采用DMA收发数据
  7. 201521123100《Java程序设计》 第10周学习总结
  8. seq2seq
  9. 创建属性Attribute
  10. springmvc跳转到自定义404页面的三种方法
  11. 使用nvm-windows安装nodejs遇到的问题(转载)
  12. JavaWeb项目中web.xml有关servlet的基本配置
  13. jquery的radio和checkbox的标签的操作集合
  14. tooltips插件
  15. Extjs tree 过滤查询功能
  16. 二、redis系列之持久化
  17. java中Logger.getLogger(Test.class),即log4日志的使用
  18. HTTP来源地址
  19. bzoj2748(HAOI2018)音量调节
  20. FreeRTOS-03中断测试

热门文章

  1. Appium安装教程
  2. Sysbench安装步骤及详情
  3. Objective-C description方法 SEL类型
  4. Halcon和visionPro的比较
  5. MR execution in YARN
  6. HTML5 Geolocation位置信息定位总结
  7. Java学习个人备忘录之构造函数&amp;this
  8. ava中普通代码块,构造代码块,静态代码块区别及示例
  9. vue-cli3配置postcss-cssnext
  10. 内核blackhole