git cherry-pick 详解 —— Git 学习笔记 18

2023-05-16

git cherry-pick 详解

初识 git cherry-pick(拣选)

拣选会提取某次提交的补丁,之后尝试将其重新应用到当前分支上。 这种方式在你只想引入特性分支中的某个提交时很有用。

假设你的项目提交历史如下:

在这里插入图片描述

如果你希望将提交 e43a6 拉取到 master 分支,你可以运行:

# 当前处于 master 分支

$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index
fails."
 3 files changed, 17 insertions(+), 3 deletions(-)

这样会拉取和 e43a6 相同的更改,但是因为应用的日期不同,你会得到一个新的提交 SHA-1 值。 现在你的历史会变成这样:

在这里插入图片描述

现在你可以删除这个特性分支(ruby_client),并丢弃不想拉入的提交(5ddae)。

需要说明的是,提取某次提交的“补丁”,这个补丁是基于其父提交的。

下图可以说明:

我们要拣选提交 C4 到 maint 分支(maint 指向 C7),Git 会生成一个补丁( Δ = C 4 − C 3 \Delta = C4-C3 Δ=C4C3),然后把 Δ \Delta Δ应用到C7上,也就是说把 C4 对 C3 的变化在 C7 上重放一遍。

在这里插入图片描述

为何会产生冲突

同 merge 操作一样,拣选操作也可能产生冲突。有人会问:不会吧,打个补丁也能冲突?

当然能。

用 diff 工具生成 patch 时,我们所做的每一处修改都会连同它的“定位信息”(原始文件中的行号、修改处前三行和后三行的原始文本)一并保存到 patch 文件中。patch 被应用时,会在目标文件中寻找“定位信息”,找到后再实施修改。可是,当我们把补丁应用到 C7 上时,有可能找不到那些定位信息了:在master分支上,C2变成了C3,在maint分支上,C2变成了C6,又变成了C7,也许C3和C7相差越来越远,C3中的上下文在C7中早已面目全非,不见踪迹。于是应用patch失败,即发生冲突。

冲突了怎么办

当拣选发生冲突的时候,GIT 会采用三路合并算法。还是以上面的图为例子,

当你运行命令 git cherry-pick C4 的时候,Local是C7,Remote是C4,Base是C3(即C4的父提交)。总结:

当你运行命令

git cherry-pick <commit C>

如果冲突了,那么Git会尝试三方合并

  • LOCAL: the commit you’re merging on top of (i.e. the HEAD of your branch)
  • REMOTE: the commit you’re cherry picking (i.e. commit C)
  • BASE: the parent of the commit you’re cherry-picking (i.e. C^, ie the parent of C)

如果三方合并的时候又冲突了怎么办?那只能靠我们人工解决了。


参考资料

【0】《Pro Git》(Scott Chacon, Ben Straub Version 2.1.14, 2018-05-19)

【1】 https://my.oschina.net/jiangyouxin/blog/108717

【2】《Git 高手之路》,人民邮电出版社

【3】 StackOverflow, https://stackoverflow.com/questions/10058068/in-a-git-cherry-pick-or-rebase-merge-conflict-how-are-base-aka-the-ancestor

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git cherry-pick 详解 —— Git 学习笔记 18 的相关文章

  • 【matlab】 GMSK的调制与解调【附详尽注释】

    简介code 1 简介 MSK调制是调制指数为0 5的二元数字频率调制 xff0c 具有很好的特性 xff0c 如恒包络 相对窄的带宽 并可以相干检测 MSK 最小频移键控 信号在任一码元间隔内 xff0c 其相位变化为 2 xff0c 而
  • 【matlab】利用matlab在图形中绘制箭头、标注、圈圈 - 很帅很酷炫

    转载声明 xff1a 感谢 xff1a MyBear 尊重原作者劳动 xff1a http www 360doc com content 14 0527 21 1054746 381542462 shtml 一 二维箭头 1 xff0e 调
  • 【杂谈】甘于平凡?还是思索求生?

    前言 不觉然 xff0c 已19年 xff0c 不知不觉 xff0c 求学生涯至此告一段落 有感觉 xff0c 岁月的痕迹开始发酵 xff0c 身体抑或精神 xff0c 今不如往 思考下 xff0c 互联网浪潮之下 xff0c 之后 xff
  • 匈牙利算法-看这篇绝对就够了!

    本文讲述的是匈牙利算法 xff0c 即图论中寻找最大匹配的算法 xff0c 暂不考虑加权的最大匹配 xff08 用KM算法实现 xff09 xff0c 文章整体结构如下 xff1a 基础概念介绍 算法的实现 好的 xff0c 开始 xff0
  • 面试的一般流程及其常见的问题

    又是一年毕业季 xff0c 也要踏上求职之路 xff0c 在这段时间也关注很多求职方面的消息 下面是一些面试的一般流程及其常见的问题 xff1a 面试职位 xff1a XXXX 开始语 xff1a 你好 xff0c 首先祝贺你通过了前几个环
  • 构建库函数(STM32)

    一 定义外设的各基地址 xff0c 参考存储器映射 span class token comment 由存储器的映射可知 xff0c 片上外设基地址0x4000 0000 span span class token macro proper
  • PID控制器原理概述

    PID控制 PID概述 xff1a 控制框图 xff1a 增量式PID和位置式PID特点 xff1a PID控制参数整定口诀 xff1a 注 xff1a 本文部分内容摘自 先进PID控制MATLAB仿真 xff08 第4版 xff09 刘金
  • PyQt5 事件处理机制

    PyQt5 事件处理机制 PyQt为事件处理提供了两种机制 xff1a 高级的信号与槽机制 xff0c 以及低级的事件处理机制 信号与槽可以说是对事件处理机制的高级封装 常见事件类型 xff1a 键盘事件 xff1a 按键按下和松开 鼠标事
  • PyQt5 实现串口接数据波形显示工具

    PyQt5 实现串口接数据波形显示工具 工具简述主程序代码Qt Designer设计UI界面程序运行效果 工具简述 基于PyQt5开发UI界面使用QtDesigner设计 xff0c 需要使用到serial模块 xff08 串口库 xff0
  • ROS CMakeLists.txt的编写学习

    调用ROS中的函数 xff0c cmakelists的编写学习过程 如有错误 xff0c 请留言指教 多谢 A 首先要了解的 CMakeLists txt是CMake的构建系统构建软件包的输入文件 任何兼容的CMake都包含了描述如何构建代
  • 【Node】Buffer 与 Stream

    node 为什么会出现 Buffer 这个模块 在最初的时候 xff0c JavaScript 只运行在浏览器端 xff0c 对于处理 Unicode 编码的字符串很容易 xff0c 但是对于处理二进制以及非 Unicode 编码的数据便无
  • ROS的tf包中坐标变换的方法

    1 setRotation函数的参数 在坐标变换的时候常有这样的写法 xff1a tfTutorialsAdding a frame C 43 43 transform setOrigin span class hljs symbol tf
  • 卡尔曼滤波的理解以及参数调整

    一 前言 卡尔曼滤波器是一种最优线性状态估计方法 xff08 等价于 在最小均方误差准则下的最佳线性滤波器 xff09 xff0c 所谓状态估计就是通过数学方法寻求与观测数据最佳拟合的状态向量 在移动机器人导航方面 xff0c 卡尔曼滤波是
  • ROS自定义msg类型及使用

    一 创建msg消息 参考 xff1a CreatingMsgAndSrv 首先创建一个空的package单独存放msg类型 xff08 当然也可以在任意的package中自定义msg类型 xff09 这里为便于说明 xff0c 建立一个名为
  • WebRTC-集成qsv硬解码实现

    1 Window下QSV硬解码配置 在libavcodec codec list c下添加 amp ff h264 qsv decoder 在ffmpeg generate gni下加入 34 libavcodec h264idct c 3
  • [ROS] ROS基础,创建工作空间,创建功能包,ros功能包相关命令,Catkin编译系统,catkin_make的编译方式

    1 工作空间 工作空间 xff08 work space xff09 是ROS系统中存放工程开发相关的文件夹 xff0c 其目录结构如下 xff1a src xff1a 代码空间 xff08 Source Space xff09 xff0c
  • ijkplayer-添加播放截图功能

    应用播放的时候需要截图 xff0c 可以在上层使用TexturView来使用截图 xff0c 不过太具有局限性呢 xff0c 还是在底层处理比较好 那么先分析下可以在哪里加截图呢 xff1f 看到网上很多做的都不能支持硬解截图 xff0c
  • avformat_seek_file及其flag含义

    我们从ijk中seek的处理流程来看ffmpeg的这个问题 int ffp seek to l FFPlayer ffp long msec assert ffp VideoState is 61 ffp gt is int64 t sta
  • 单例模式

    单例模式 xff1a include lt iostream gt using namespace std class Singleton public Singleton cout lt lt 34 Singleton虚构函数 34 lt
  • ffmpeg系列-解决ffmpeg获取aac音频文件duration不准

    这个问题是这样产生的 xff0c 一同事反应会随机出现ijk获取到的aac文件的duration不准 xff0c 发来一看 xff0c 确实不准 xff0c 在AE或者系统mediaplayer中得到的都是8 4秒 xff08 准确时间是M

随机推荐

  • 基于librtmp的推流实现

    1 推流 配置好rtmpdump库后 xff0c 我们可以先用命令行来推流看下效果 2 流程图 使用librtmp发布RTMP流的可以使用两种API xff1a RTMP SendPacket 和RTMP Write 使用RTMP Send
  • ijkplayer-音视频变速播放实现

    本文主要分析变速播放框架实现细节 xff0c 不分析sonic以及soundtouch变速算法 在我的sonic变速变调原理一文中会详细讲解基于基音周期来实现变速变调的原理 1 变速入口分析 从jni层的 setPropertyFloat函
  • Android_WakeLock使用

    1 前言与WakeLock简介 1 1 前言 一些手机app xff08 如微信 QQ等 xff09 有新消息来到达 xff0c 手机屏幕即使在锁屏状态下也会亮起 xff0c 并提示用户有新消息 但是 xff0c 一般情况下手机锁屏后 xf
  • ContentResolver.query详解

    1 查询手机的联系人 public void getContacts ContentResolver contentResolver 61 this getContentResolver Cursor cursor 61 contentRe
  • [ROS] 安装Gazebo 使用Gazebo 实现摄像头仿真 雷达仿真 Kinect仿真

    目录 安装Gazebo 1 添加源 2 安装gazebo 使用Gazepo 实现摄像头仿真 1 工作空间与功能包的创建 2 xff09 Gazebo配置文件 3 车体urdf建模与控制程序 4 launch文件 5 执行launch文件运行
  • jni开发-GetMethodID与CallObjectMethod的坑

    在java层中声明一个方法用于创建一个audiotrack xff0c 在C层中调用这个方法并获取audiotrack对象 先看下面的代码 xff1a SuPlayer java public AudioTrack createAudioT
  • 基于电信行业的AIOps应用与实践

    欢迎关注 程序杂货铺 公众号 xff0c 里面有精彩内容 xff0c 欢迎大家收看 1 摘要 xff1a 在大型互联网架构中 xff0c 为提升平台的计算能力及资源利用率 xff0c 普遍采用分布式技术 然而使用分布式技术也会带来一些潜在问
  • 关于解耦的理解

    在程序设计过程中 xff0c 最头痛的不是逻辑的编写过程 xff0c 更不是算法的设计 xff0c 最头痛的是如何设计出一个容易维护 xff0c 扩展性好的东西 而耦合问题是最令人烦躁的 xff0c 它的存在很多人发现不了 xff0c 所以
  • OFFICER: A general optimization framework for OpenFlow rule allocation and endpoint policy enforceme

    OFFICER gt 转发规则放置问题 gt 什么是规则放置问题 xff1f 一组规则如何放置到容量有限的交换机上 xff0c 以满足上层应用的策略 xff08 ACL 流转发 xff09 规则用来匹配流 xff0c 其action是策略的
  • 不带头节点的单链表如何头插(多图易懂)

    文章目录 缘起带头节点的头插不带头节点的头插错误的代码为什么错误如何修改返回新的头指针二级指针 缘起 本文想说的是单向非循环链表的头插 单向非循环链表 xff0c 可以是带头节点的 xff0c 也可以是不带头节点的 对于前者 xff0c 代
  • C语言中的匿名结构体

    在 C 的 C11 标准中 xff0c 添加了匿名结构和匿名联合 匿名联合 结构也称为未命名联合 结构 xff0c 由于没有名称 xff0c 因此不会创建它们的直接对象 xff08 或变量 xff09 xff0c 通常我们在嵌套结构或联合中
  • FreeRTOS 的命名规则

    文章目录 变量函数宏定义结语 如果是刚接触 FreeRTOS xff0c 看到它的命名 xff0c 简直是匪夷所思 xff0c 犹如天书 所以 xff0c 还是有必要了解它的命名规则 变量 uint32 t 定义的变量都加上前缀 ul u
  • sizeof 的结果取决于什么

    本文讨论的是 C 语言中的一个运算符 xff1a sizeof 注意 xff0c 是运算符 xff0c 不是函数 sizeof 的结果是在编译时就可以确定的 xff0c 于是有人认为 xff0c sizeof 的结果取决于编译器 这样说也对
  • Typora 页内跳转的语法

    页内跳转一般有 2 种情况 xff1a 跳转到某个标题处跳转到正文的某个地方 跳转到标题 跳转到标题的语法比较简单 xff0c 举个例子 我是一个标题 跳转到指定标题 我是一个标题 效果 xff1a 按住ctrl xff0c 鼠标点击第 6
  • Linux 0.11 实验环境搭建

    如果想学习Linux 0 11 xff0c 实验环境是必不可少的 最好是能编译 xff0c 能运行 xff0c 能调试 如今大家都是用64位的Linux操作系统 xff0c 而且是高版本的GCC xff08 4 0以上 xff09 xff0
  • ORA-7445(kgskhighthreshold)错误

    10 2 0 4 RAC 环境的ASM 实例出现这个ORA 7445 错误 64 more 64 错误信息为 xff1a Fri Dec 3 19 49 49 2010 Errors in file opt app oracle admin
  • 详解8259A

    详解8259A 可编程中断控制器 可编程中断控制器 xff08 PIC Programmable Interrupt Controller 是微机系统中管理设备中断请求的管理者 当PIC向处理器的INT引脚发出一个中断信号时 xff0c 处
  • 故障解决:error while loading shared libraries: libncurses.so.5

    故障解决 xff1a error while loading shared libraries libncurses so 5 问题的提出 在我准备调试 Linux 0 11 内核的时候 xff0c 出现了如下故障 xff08 真奇怪 xf
  • 故障解决:端口已被占用 1080

    更新记录 版本时间修订内容1 02018 3 28增加了方案二1 12019 8 9增加了方案三 问题的提出 实验环境 xff1a Win7 64bit 也许你会碰到以下错误 xff1a 本文给出2种解决方案 方案一 既然说端口已被占用 x
  • git cherry-pick 详解 —— Git 学习笔记 18

    git cherry pick 详解 初识 git cherry pick xff08 拣选 xff09 拣选会提取某次提交的补丁 xff0c 之后尝试将其重新应用到当前分支上 这种方式在你只想引入特性分支中的某个提交时很有用 假设你的项目