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

git使用笔记(十一)rebase的更多相关文章

  1. 《Pro Git》笔记3:分支基本操作

    <Pro Git>笔记3:Git分支基本操作 分支使多线开发和合并非常容易.Git的分支就是一个指向提交对象的可变指针,极其轻量.Git的默认分支为master. 1.Git数据存储结构和 ...

  2. git入门笔记汇总——(廖雪峰博客git入门)

    本文内容是对廖雪峰老师Git教程做的笔记,外加一些自己的学习心得,还抱着学以致用的心态来实践一番 如有显示错误 请移步本人github:git教程小结 Git学习笔记 Git简介 安装Git 创建版本 ...

  3. 【Git 使用笔记】第四部分:git在公司中的开发流程

    先声明几个变量 仓管A:主分支,只有master分支仓管B:开发分支,只有各个业务开发分支   仓管B fork 于 A 如下图 为了保证 代码的稳定性,只有 仓管B中的某个分支测试完毕并进行了代码r ...

  4. 【Git 使用笔记】第三部分:多分支开发

    ###举例仓库 仓库地址A:git@gitlab.54php.cn:guowei/demos.git 仓库地址B:git@gitlab.54php.cn:infra/demos.git 开发人员仓库C ...

  5. 【Git 使用笔记】第二部分:基本命令 和 单分支开发

    git 基本命令 git add . git commit -am "请填写你NB的备注" git fetch --all git fetch -p  //如果远程分支删除了,本地 ...

  6. git实践笔记

    title: git实践笔记 date: 2016-10-15 18:40:26 tags: [Git] categories: [Tool,Git] --- 概述 本文记录常用 git 的功能和命令 ...

  7. GIT学习笔记(5):变基

    GIT学习笔记(5):变基rebase 变基 引入变基 在Git中整合来自不同分支的修改主要有两种方法:merge以及rebase. 整合分支最容易的方法是merge,他会把两个分支的最新快照以及两者 ...

  8. Pro Git 学习笔记

    Pro Git 学习笔记 文档地址:Pro Git原文地址:PRO GIT 学习笔记 git常见命令 1.Git起步 初次运行Git前的配置 用户信息 git config --global user ...

  9. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  10. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

随机推荐

  1. MySQL☞having子句

    having子句:是跟group  by结合使用,对分组以后的数据再次进行过滤,经常跟聚合函数结合使用 格式: select  列名/聚合函数 from  表名 where  条件 group  by ...

  2. Python教程:Python中的for 语句

    Python 中的 for 语句与你在 C 或 Pascal 中可能用到的有所不同. Python教程 中的 for 语句并不总是对算术递增的数值进行迭代(如同 Pascal),或是给予用户定义迭代步 ...

  3. JAVA 面试须知

    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...

  4. Android开发-API指南-<path-permission>

    <path-permission> 英文原文:http://developer.android.com/guide/topics/manifest/path-permission-elem ...

  5. Skype for Business Server 方案

    方案说明: 高可用性的配置屏蔽了单点故障,使得当一个服务器节点失效时,另外的可用的节点能够进行服务的接管.可伸缩性的配置可以保证当即时沟通平台的使用用户增加时,该平台应该具有良好的可伸缩性,能非常方便 ...

  6. Java 单例模式探讨

    以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...

  7. 第一章 Java Web应用开发技术

    Java Web应用开发是基于JavaEE(JavaEnterprise Edition)框架的,而JavaEE是建立在Java平台上的企业级应用解决方案.JavaEES框架提供的Web开发技术主要支 ...

  8. 自定义View 和 ViewGroup

    一. 自定义View介绍 自定义View时, 继承View基类, 并实现其中的一些方法. (1) ~ (2) 方法与构造相关 (3) ~ (5) 方法与组件大小位置相关 (6) ~ (9) 方法与触摸 ...

  9. 3dContactPointAnnotationTool开发日志(十七)

      今天又改进了一下算法,把生成出来的接触点按中心坐标拍了个序,再把中心坐标一样的坐标点合并,x,y,z每个维度都只保留大的值.然后来看看效果:   先是1倍的,只剩下4096个接触点了,2^12个, ...

  10. html5 download all in one

    html5 download all in one HTML5 download & Fetch API & File API & Blob https://scarletsk ...