git rebase 修改中间的commit

2023-09-21 19:34:50

0. 前言

今天在移植最新版本 kfence 功能的时候,一共需要移植大概40多个 patch,中间有很多patch 存在冲突,需要手动修改后才能合并。当所有的patch 都合并完成进行编译的时候,发现其中一个 patch 手动合并出了个错误。

假如共有 40 个 patch,编号 1 - 40,现在问题是第 20 个patch 需要再修改一下,而 21 - 40 的patch 有很多手动修改的,怎么能快速有效的在不 reset 的基础上修改第 20 个patch呢?

这就是本文需要说明的 git rebase命令。

1. git rebase -i HEAD~n

先来看下 option -i:

-i
--interactive
Make a list of the commits which are about to be rebased. Let the user edit that list before rebasing. This mode can also be used to split commits (see SPLITTING COMMITS below).

The commit list format can be changed by setting the configuration option rebase.instructionFormat. A customized instruction format will automatically have the long commit hash prepended to the format.

See also INCOMPATIBLE OPTIONS below.

通过该选项,产生一个将要 rebase 的commit list,可以让用户在 rebase 之前进入交互的模式。

HEAD~n,会列出从 HEAD 开始的倒数 n commit list,例如 n = 4 时:

当执行 git rebase -i HEAD~4 命令,就会弹出从 HEAD 开始的倒数 4 个 commit list,最后一个是 HEAD commit。

当将第一行 commit,即倒数第 4 个 commit 的命令从 pick 改成 edit 时,则代码rebase 停在这个 commit,用以 amend 处理。

当保存修改并退出交互之后,就会发现倒数第 4 个commit 进入stop 状态,等待 amend。

剩下来就简单了:

  • 修改代码;
  • git add
  • git commit --amend
  • git rebase --continue

2. 交互中的命令

在交互的窗口中,除了之前说的 edit 命令,本文也补充说下其他的命令:

  • p/pick,保持 commit;
  • r/reword,保留commit,但是需要修改 commit  message;
  • e/edit,保留 commit,但这里需要停下来等到 amend;
  • s/squash,保留commit,但会将该 commit 合并到前一个 commit 中;
  • f/fixup,类似 squash,但是不会保留 commit message;
  • x/exec,等于在 shell 中运行命令;
  • d/drop,丢弃该 commit;

官方文档:

https://git-scm.com/docs/git-rebase/

更多推荐

前端面试手撕编程之ES+算法

目录ES6防抖节流防抖、节流应用改变thiscalltypeofthis!=='function'context=context||windowcontext._this=thisdeletecontext._thisbind:return_this.apply(context,[...arguments].slice

REASUNOS瑞森半导体-MOS管系列在服务器电源上的应用

一、前言服务器电源是指使用在服务器上的电源(POWER),它和PC电源一样,都是一种开关电源,指能够将交流电转换为服务器所需直流电的电源。服务器电源按照标准可以分为ATX电源和SSI电源等。ATX标准使用较为普遍,主要用于台式机、工作站和低端服务器;而SSI标准是随着服务器技术的发展而产生的,适用于各种档次的机架式服务

设计模式之迭代器模式

文章目录迭代器模式基本介绍迭代器模式的原理类图对原理类图的说明-即(迭代器模式的角色及职责)迭代器模式应用实例迭代器模式在JDK-ArrayList集合应用的源码分析迭代器模式的注意事项和细节优点缺点迭代器模式基本介绍迭代器模式(IteratorPattern)是常用的设计模式,属于行为型模式如果我们的集合元素是用不同

家居服务小程序发展指南

随着互联网的快速发展,越来越多的企业开始关注并投资于线上平台的建设,以满足用户的多样化需求。家居服务行业也不例外,通过打造小程序平台,可以更好地服务用户,提供更便捷的家居服务体验。首先,我们可以选择使用第三方制作平台,如【乔拓云】网,以便快速搭建家居服务小程序。登录乔拓云网后,点击【轻应用小程序】,即可进入设计小程序页

常见的服务器异常包括哪些?

服务器异常通常指服务器在执行其预期功能时遇到的问题或错误。这可能是由各种原因引起的,包括硬件故障、软件错误、网络问题、配置错误等。服务器异常可能导致服务器无法正常工作或提供预期的服务。这可能表现为服务器无法响应客户端请求、速度变慢、崩溃、数据丢失等问题。常见的服务器异常包括:500InternalServerError

rust枚举

一、定义枚举1.使用enum关键字定义枚举。语法格式如下enumenum_name{variant1,variant2,variant3}例如enumFruits{Banana,//香蕉Pear,//梨Mandarin,//橘子Eggplant//茄子}2.可以为枚举成员添加属性enumBook{Papery(u32)

RUST 每日一省:闭包

Rust中的闭包是一种可以存入外层函数中变量或作为参数传递给其他函数的匿名函数。你可以在一个地方创建闭包,然后在不同的上下文环境中调用该闭包来完成运算。和一般的函数不同,闭包可以从定义它的作用域中捕获值。语法闭包由“||”和“{}”组合而成。“||”中指定闭包的参数,如果有多个参数,使用逗号分隔。闭包的参数类型可以省略

云原生周刊:Grafana Beyla 发布 | 2023.9.18

开源项目推荐KomiserKomiser是一个与云无关的开源资源管理器。它与多个云提供商(包括AWS、Azure、Civo、DigitalOcean、OCI、Linode、腾讯和Scaleway)集成,构建云资产库存,并帮助您在资源层面分解成本。kr8s这是一个用于Kubernetes的简单、可扩展的Python客户端

BOA服务器移植

BOA服务器移植1、源码下载http://www.boa.org/News!(lastupdated23February2005)LatestReleasedVersion(0.94.13)here(signaturehere)---下载地址1.1boa简介:其可执行代码只有大约60KB左右,Boa是一个单任务的HTT

Qt5开发及实例V2.0-第十二章-Qt多线程

Qt5开发及实例V2.0-第十二章-Qt多线程第12章Qt5多线程12.1多线程及简单实例12.2多线程控制12.2.1互斥量12.2.2信号量12.2.3线程等待与唤醒12.3多线程应用12.3.1【实例】:服务器编程12.3.2【实例】:客户端编程本章相关例程源码下载1.Qt5开发及实例_CH1201.rar下载2

基于SpringBoot的校园周边美食探索及分享平台

目录前言一、技术栈二、系统功能介绍前台首页功能模块用户功能模块管理员功能模块三、核心代码1、登录模块2、文件上传模块3、代码封装前言美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起,互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域,传统的美食业进

热文推荐