当前位置: 首页 > news >正文

git rebase小计

git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态。要搞清楚这个东西,要先看看版本库状态切换的两种情况:

1.    我们知道,在某个分支上,我们可以通过git reset,实现将当前分支切换到本分支以前的任何一个版本状态,即所谓的回溯。即实现了本分支的后悔药。也即版本控制系统的初衷。

2.    还有另一种情况,当我们的项目有多个分支的时候。我们除了在本地开发的时候可能会回溯外,也常常会将和自己并行开发的别人的分支修改添加到自 己本地来。这种情况下很常见。作为项目管理员,肯定会不断的合并各个子项目的补丁,并将最新版本推送到公共版本库,而作为开发人员之一,提交自己的补丁之 后,往往需要将自己的工作更新到最新的版本库,也就是说把别的分支的工作包含进来。

举个例子来说吧!假设我们的项目初期只有一个master分支,然后分支上作过两次提交。这个时候系统只有一个master分支,他的分支历史如下:

104715_MF2S_661133.png

这个时候,我们可以通过git resetmaster分支(工作目录、工作缓存或者是版本库)切换到master1或者master0版本,这就是前面所说的第一种情况。
假设我们这里把master分支通过git reset回溯到了master1状态。那么这个时候系统仍然只有一个master分支,分支的历史如下:

104832_Kdn8_661133.png

然后,我们在这里以master1为起点,创建了另一个分支test。那么对于test分支来说,他的第一个版本test0就和master1是同一个版本,此时项目的分支历史如下:

这个时候,我们分别对master分支、test分支作两次提交,此时版本库应该成了这个样子:

104952_Toec_661133.png

1.    这个时候,通过第一种git reset的方式,可以将master分支的当前状态(master3)回溯到master分支的master0master1master2状态。 也可已将test分支当前状态(test2)回溯到test分支的test0test1状态,以及test分支的父分支mastermaster0 master1状态。

2.    那么。如果我要让test分支从test0test2之间所有的改变都添加到master分支来,使得master分支包含test分支的所有修改。这个时候就要用到git rebase了。

首先,我们切换到master分支,然后运行下面的命令,即可实现我们的要求:

105029_S7r3_661133.png

这个时候,git做了些什么呢?

1.    先将test分支的代码checkout出来,作为工作目录

2.    然后将master分支从test分支创建起的所有改变的补丁,依次打上。如果打补丁的过程没问题,rebase就搞定了

3.    如果打补丁的时候出现了问题,就会提示你处理冲突。处理好了,可以运行git rebase –continue继续直到完成

4.    如果你不想处理,你还是有两个选择,一个是放弃rebase过程(运行git rebase –abort),另一个是直接用test分支的取代当前分支的(git rebase –skip)。

此外,rebase还能够让你修订以前提交,这个功能日后再说。


转载于:https://my.oschina.net/tingzi/blog/403757

相关文章:

  • cacti监控apache和nginx的配置
  • java web每天定时执行任务
  • 第3章 Java语言基础----声明常量
  • 颜色对比比率计算
  • mysql数据库中的using
  • 将分页功能从JSP页面中独立出来
  • Azure多网卡虚拟机
  • UNIX常见命令索引 (echo,find,xargs)
  • IMG-后勤执行-仓库管理-仓库管理概念-实际数据的执行记录(WM-1)
  • JavaScript数据结构-字典
  • 《Effective C++》第4章 设计与声明(2)-读书笔记
  • 4.PowerShell -- 数组,哈希表
  • iPhone取消软件更新上边的1
  • CentOS禁用root本地或远程ssh登录
  • nginx 自定义header 如何获取
  • 时间复杂度分析经典问题——最大子序列和
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • C# 免费离线人脸识别 2.0 Demo
  • CSS3 变换
  • Java小白进阶笔记(3)-初级面向对象
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 阿里云Kubernetes容器服务上体验Knative
  • 和 || 运算
  • 如何解决微信端直接跳WAP端
  • 学习笔记TF060:图像语音结合,看图说话
  • #考研#计算机文化知识1(局域网及网络互联)
  • $NOIp2018$劝退记
  • (20050108)又读《平凡的世界》
  • (bean配置类的注解开发)学习Spring的第十三天
  • (day6) 319. 灯泡开关
  • (九)One-Wire总线-DS18B20
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (篇九)MySQL常用内置函数
  • (四)汇编语言——简单程序
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net Application的目录
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 中的轻量级线程安全
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • //解决validator验证插件多个name相同只验证第一的问题
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • [20171102]视图v$session中process字段含义
  • [2669]2-2 Time类的定义
  • [Android]一个简单使用Handler做Timer的例子
  • [Angular] 笔记 7:模块
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [cogs2652]秘术「天文密葬法」
  • [Django 0-1] Core.Checks 模块
  • [emuch.net]MatrixComputations(7-12)