git cherry-pick和git stash命令详解
git cherry-pick命令
-
定义
- 用于将指定的提交(commit)从一个分支"挑选"并应用到当前分支
- 它复制某个提交的更改(diff),生成一个新的提交,保留原提交的更改内容,但拥有新的提交ID(SHA值)
-
命令
-
git cherry-pick <commit-id>
-
-
核心功能
- 提取单个或多个提交的更改,应用到目标分支
- 不影响分支的整体历史,仅复制指定提交
- 适合修复bug、移植特性或整理提交
-
适用场景
- 需要从一个分支移植一个特定更改到另一个分支时非常有用
-
示例
-
# 假设有以下分支 # main分支有提交A、B、C。 # feature分支从B分叉,包含提交D、E、F。 A---B---C (main)\D---E---F (feature)# 现在将feature分支的提交E(例如一个Bug修复)应用到main,但不想要D或F。 # 首先切换到main分支 git switch main # git checkout main # 然后执行cherry-pick,选择提交E(假设E的SHA值为e123456) # 如果无冲突,Git会在main分支创建一个新提交E',包含E的更改 git cherry-pick e123456# 提交后的结果 A---B---C---E' (main)\D---E---F (feature)# 如果有冲突,提示错误信息,如下 error: could not apply e123456... [commit message]# 手动解决冲突,解决完成后 git add <file># 继续cherry-pick git cherry-pick --continue# 或者放弃cherry-pick git cherry-pick --abort
-
-
批量cherry-pick
-
# 挑选多个提交(如E和F) git cherry-pick e123456 f789012# 或指定范围(从D到F,不包括D) git cherry-pick D..F
-
-
优点
- 精准选择
- 只引入特定提交,避免不需要的更改,灵活性高
- 适合移植bug修复或特定功能
- 独立操作
- 不影响源分支或整体历史,仅在当前分支生成新提交
- 便于协作
- 可快速将关健修复从开发分支应用到生产分支
- 简单直观
- 相比
merge
和rebase
,操作单一,易于理解和执行
- 相比
- 精准选择
-
缺点
- 手动挑选成本高
- 需要知道具体提交的SHA值或范围,手动操作繁琐
- 不适合大量提交的整合
- 冲突处理复杂
- 如果cherry-pick的提交依赖其他未挑选的提交,可能导致冲突或功能不完整
- 冲突需手动解决,多次
cherry-pick
可能重复处理类似冲突
- 历史重复
cherry-pick
生成新提交,可能导致代码重复(若后续合并源分支)- 例如:E’和E可能在在未来合并时造成冲突
- 丢失上下文
- 只复制提交内容,丢失原提交的完整分支上下文,调试或追溯可能困难
- 手动挑选成本高
-
适用场景
- 修复bug
- 将开发分支的bug修复快速应用到生产分支
- 移植特性
- 将特性分支的某些功能引入其他分支(如实验性功能)
- 清理历史
- 挑选关键提交,整理分支历史,结合
rebase
适用
- 挑选关键提交,整理分支历史,结合
- 临时整合
- 在合并整个分支前,测试特定提交的效果
- 修复bug
-
与
merge
和rebase
对比- vs
merge
merge
整合整个分支,保留历史(快进线性或非快进线性)cherry-pick
只选特定提交,适合精细控制
- vs
rebase
rebase
重放整个分支历史,生成线性历史cherry-pick
只重放指定提交,操作更局部
- vs
git stash命令
- 定义
- 用于临时保存工作目录和索引(暂存区)的更改,并将工作目录恢复到最近一次提交的状态(干净状态)
- 它将未提交的更改(包括已跟踪文件的修改和暂存的更改)存储到一个栈(stash stack)中,供后续恢复或应用
- 命令
git stash
- 核心功能
- 保存未提交的更改(工作目录和暂存区)
- 清理工作目录,恢复到最近的提交状态
- 允许稍后恢复或应用保存的更改到当前或其他分支
- 目的
- 避免提交临时更改:在切换分支、拉取代码或执行其他操作时,临时保存未完成的工作
- 保持工作目录干净:确保工作目录无未提交更改,便于git操作(如合并、变基)
- 灵活管理更改:支持多次stash,随时恢复或丢弃
功能与命令
- 保存更改
- 保存工作目录和暂存区的更改到stash栈
- 默认保存已跟踪文件的修改(包括暂存和未暂存更改)
- 恢复工作目录
- 将工作目录和暂存区恢复到最近提交的状态
- 恢复更改
- 将工作目录和暂存区恢复到最近提交的状态
- 恢复更改
- 从stash栈中恢复保存的更改到当前分支
- 管理stash
- 查看、应用、删除或清理stash记录
常用命令
-
保存更改
-
git stash# 默认保存更改,命名为stash@{n}(n为栈索引,从0开始)# 添加描述 git stash push -m 'message'
-
保存未跟踪文件,包含未跟踪文件(如新文件)
-
git stash -u
-
保存所有文件,包含未跟踪和忽略文件。
git stash -a
-
查看stash列表
git stash list# 显示所有stash记录,例如 stash@{0}: WIP on feature: abc1234 Add feature X stash@{1}: On main: def5678 Temp changes
-
应用stash
-
git stash apply # 应用最新stash(stash@{0}),保留stash记录 git stash apply stash@{1}
-
应用并删除stash
-
git stash pop # 应用最新stash并从栈中移除
-
删除stash
-
git stash drop stash@{1} # 删除指定stash
-
清理所有stash
-
git stash clear
-
-
优点
- 灵活性
- 快速保存和恢复未提交更改,无需创建临时提交
- 支持多次stash,管理多个工作状态
- 保持干净
- 清理工作目录,便于切换分支、拉取代码或执行其他git操作
- 非破坏性
- 更改安全存储在stash栈,不会丢失(除非手动清理)
- 跨分支应用
- 可将stash应用到其他分支,适合移植临时更改
- 简单易用
- 命令直观,适合快速上下文切换
- 灵活性
-
缺点
- 管理复杂
- 多个stash可能导致栈混乱,难以记住每个stash的内容
- 默认命令,如stash@{0}不够直观,需手动添加描述
- 冲突风险
- 应用stash时,若当前分支状态不兼容,可能引发冲突,需手动解决
- 未跟踪文件遗漏
- 默认不保存未跟踪文件,需显式使用-u或-a,否则可能遗漏
- 不适合长期存储
- stash设计为临时保存,长期依赖可能导致管理混乱,不如提交或分支
- 调试困难
- stash记录仅保存更改差异,缺乏完整提交上下文,追溯可能不便
- 管理复杂
-
应用场景
- 临时切换分支
- 在开发特性时,需紧急切换到main修复bug,stash保存未完成的工作
- 拉取最新的代码
- 执行
git pull
前,工作目录有未提交更改,stash清理目录以避免冲突
- 执行
- 测试临时更改
- 测试某些修改后想恢复原始状态,stash保存实验性更改
- 移植更改
- 将未提交更改应用到其他分支,类似
cherry-pick
但针对未提交内容
- 将未提交更改应用到其他分支,类似
- 清理提交历史
- 在提交前整理工作目录,stash临时更改,调整后再提交
- 临时切换分支
相关文章:
git cherry-pick和git stash命令详解
git cherry-pick命令 定义 用于将指定的提交(commit)从一个分支"挑选"并应用到当前分支它复制某个提交的更改(diff),生成一个新的提交,保留原提交的更改内容,但拥有新的提交ID(SHA值)…...
MapReduce基本介绍
核心思想 分而治之:将大规模的数据处理任务分解成多个可以并行处理的子任务,然后将这些子任务分配到不同的计算节点上进行处理,最后将各个子任务的处理结果合并起来,得到最终的结果。 工作流程 Map 阶段: 输入数据被…...
正则表达式常用验证(一)
正则表达式(Regular Expression)是一种强大的文本匹配工具,常用于验证字符串的格式。以下是常见的正则表达式验证场景及其对应的表达式: 1. 数字验证 验证纯数字: ^\d+$示例:123、456789 验证固定长度的数字(如 6 位): ^\d{6}$示例:123456 验证数字范围(如 1 到 100…...
基于几何布朗运动的股价预测模型构建与分析
基于几何布朗运动的股价预测模型构建与分析 摘要 本文建立基于几何布朗运动的股价预测模型,结合极大似然估计与蒙特卡洛模拟,推导股价条件概率密度函数并构建动态预测区间。实证分析显示模型在标普500指数预测中取得89%的覆盖概率,波动率估…...
通过SSRF击穿内网!kali-ssrf靶场实战!
目录 1. 靶场拓扑图 2. 判断SSRF的存在 3. SSRF获取本地信息 3.1. SSRF常用协议 3.2. 使用file协议 4. 172.150.23.1/24探测端口 5. 172.150.23.22 - 代码注入 6. 172.150.23.23 SQL注入 7. 172.150.23.24 命令执行 7.1. 实验步骤 8. 172.150.23.27:6379 Redis未授权…...
Yarn-概述
一、YARN 是什么? YARN(Yet Another Resource Negotiator) 是 Apache Hadoop 生态系统中的核心组件,是一个 分布式资源管理和作业调度系统,主要用于协调集群中的计算资源(CPU、内存、磁盘、网络等…...
如何在sheel中运行spark
// 读取文件,得到RDD val rdd1 sc.textFile("hdfs://hadoop100:8020/wcinput/words.txt") // 将单词进行切割,得到一个存储全部单词的RDD val rdd2 fileRDD.flatMap(line > line.split(" ")) // 将单词转换为元组对象࿰…...
销售具备的能力有哪些
销售人员是许多公司业务的开拓者,他们的存在让公司的利益更高。因此,在许多的公司中,销售人员的待遇都非常的高。也因此,有的人看重销售人员的薪资待遇想寻找销售型的工作。但是,相当销售人员还需要具有一定的工作能力…...
React面试常问问题详解
以下是30个React面试中常见的问题及简要解析,涵盖基础概念、核心原理、性能优化、Hooks、状态管理等方面,适用于初中高级开发者准备面试时参考: 一、React 基础与核心概念 React 是什么? React 是由 Facebook 开发的用于构建用户界…...
POM 和关键字驱动区别
一、POM 和关键字驱动的区别以及各自的优势分别是什么? 1、POM 适用于对单个系统封装的自动化框架中,对业务覆盖更精准; 优势:更加便利、维护性更高 2、关键字驱动可以用于对多个业务、多个系统进行封装的自动化框架中&…...
2025年PMP 学习十一 第8章 项目质量管理(8.3)
第8章 项目质量管理(8.3) 文章目录 第8章 项目质量管理(8.3)8.3 控制质量1. 定义与作用2.输入、输出,工具和技术3. 数据收集 - 核查表(工具与技术)4. 数据展示 - 帕雷托图(工具与技术…...
【笔记】C++操作mysql及相关配置
目录 使用软件版本信息: 1. C配置mysql相关依赖 1.1 下载 1.2 文件配置 1.3 C编译器配置 2、测试程序 使用软件版本信息: Visual Studio 2022Mysql 8.0C Connector库 8.3.0 可直接在https://download.csdn.net/download/Word_And_Me_/90826524下…...
【MapReduce入门】深度解析MapReduce:定义、核心特点、优缺点及适用场景
目录 1 什么是MapReduce? 2 MapReduce的核心特点 2.1 分布式处理 2.2 容错机制 3 MapReduce的完整工作流程 4 MapReduce的优缺点分析 4.1 优势 4.2 局限性 5 MapReduce典型应用场景 5.1 适用场景 5.2 不适用场景 6 MapReduce与其他技术的对比 7 总结 1…...
EMQX v5.0通过连接器和规则同步数据
1 概述 EMQX数据集成功能,帮助用户将所有的业务数据无需额外编写代码即可快速完成处理与分发。 数据集成能力由连接器和规则两部分组成,用户可以使用数据桥接或 MQTT 主题来接入数据,使用规则处理数据后,再通过数据桥接将数据发…...
JCJC 错别字检测自定义词典 API 接口文档 2025-05-13
JCJC 错别字检测自定义词典 API 接口文档 2025-05-13 JCJC 错别字检测系统自定义词典接口全面开放。企业用户和个人付费用户都可以使用接口方式管理自定义词典。 自定义词典包含: 白名单和黑名单两种类型。 也可以登录个人中心,点击左侧边栏导航以 UI …...
Qt 样式表qss学习
语法 /* 语法结构 */ selector { attribute: value }selector(选择器) selector(选择器):指定要应用样式的控件类型或特定控件。例如: QWidget:所有QWidget及其子类。QPushButton:…...
Linux文件编程——读写结构体、链表等其他类型的数据
在 Linux 文件编程中, open、read、write、close等函数,本质上的读写内容是一个无类型的指针,所以其也可以读写整型、数组、结构体、链表等不同类型的数据。 SYNOPSIS #include <unistd.h>ssize_t write(int fd, const void *buf, siz…...
离散制造企业WMS+MES+QMS+条码管理系统高保真原型全解析
在离散型制造企业的生产过程中,库存管理混乱、生产进度不透明、质检流程繁琐等问题常常成为制约企业发展的瓶颈。为了帮助企业实现全流程数字化管控,我们精心打造了一款基于离散型制造企业(涵盖单件生产、批量生产、混合生产模式)…...
Datawhale PyPOTS时间序列5月第1次笔记
课程原地址: https://github.com/WenjieDu/PyPOTS(Package地址) https://github.com/WenjieDu/BrewPOTS/tree/datawhale/202505_datawhale(Tutorial地址) 2.1 PyPOTS简介 PyPOTS 是一个专为处理部分观测时间序列&a…...
linux 抓包工具tcpdump使用小记(使用时注意权限和系统资源)
tcpdump 是一款强大的网络数据包捕获和分析工具,常用于网络故障排查、协议分析、安全审计等场景。以下是其核心功能、使用方法及常见场景的详细介绍: 1. 基本功能 数据包捕获:监听网络接口,实时捕获传输的数据包。过滤规则&#…...
HTTP和HTTPS模块
一、HTTP 模块 1. 创建 HTTP 服务器 基本服务器示例 const http require(http);const server http.createServer((req, res) > {res.statusCode 200;res.setHeader(Content-Type, text/plain);res.end(Hello World\n); });server.listen(3000, 127.0.0.1, () > {co…...
操作系统导论——第29章 基于锁的并发数据结构
通过锁可以使数据结构线程安全(thread safe)。当然,具体如何加锁决定了该数据结构的正确性和效率?挑战是: 关键问题:如何给数据结构加锁? 对于特定数据结构,如何加锁才能让该结构功能…...
TensorFlow之微分求导
目录 前言示例手动微分实现两个未知数, 求偏导tf.GradientTape常量求导tf.GradientTape二阶导数tf.GradientTape实现梯度下降结合optimizer实现梯度下降 前言 在TensorFlow中,微分是个非常重要的概念。它们分别用于自动求导(计算梯度)和高效…...
电池自动点焊机:多领域电池制造的核心设备
电池自动点焊机作为电池制造领域的关键设备,通过电阻热焊接技术实现金属连接片与电池极片的精确焊接,广泛应用于数码电池、工具电池、储能电池、电动车电池及动力电池的生产环节。其核心技术基于微电脑控制与多脉冲焊接模式,能够针对不同电池…...
第五部分:第一节 - Node.js 简介与环境:让 JavaScript 走进厨房
我们之前学习的 JavaScript 主要运行在浏览器中,由浏览器内置的 JavaScript 引擎(如 Chrome 的 V8 引擎)来解释执行。Node.js 则是一个JavaScript 运行时环境,它也使用了 Chrome 的 V8 引擎,但它不是在浏览器里&#x…...
MQTT 协议详解:物联网通信的利器
在当今物联网(IoT)迅猛发展的背景下,设备之间的高效、可靠通信变得尤为重要。MQTT(Message Queuing Telemetry Transport)作为一种轻量级的消息传输协议,因其低带宽占用和高可靠性,成为物联网领…...
CST软件对OPERACST软件联合仿真汽车无线充电站对人体的影响
上海又收紧了新能源车的免费上牌政策。所以年前一些伙伴和我探讨过买新能源汽车的问题,小伙伴们基本纠结的点是买插电还是纯电?我个人是很抗拒新能源车的,也开过坐过。个人有几个观点: 溢价过高,不保值。实际并不环保…...
C++STL——map和set的使用
目录 1.容器 1.1 序列容器 1.2 容器适配器 1.3 关联容器 1.4 无序关联容器 1.5 键值对到底是个什么东西? 2.set系列的使用 2.1 set类的介绍 2.2 set的构造以及迭代器 2.3 set的增,删,查 2.3.1 插入 2.3.2 删除 2.3.3 查找 2.3.4…...
Ensemble Alignment Subspace Adaptation Method for Cross-Scene Classification
用于跨场景分类的集成对齐子空间自适应方法 摘要:本文提出了一种用于跨场景分类的集成对齐子空间自适应(EASA)方法,它可以解决同谱异物和异谱同物的问题。该算法将集成学习的思想与域自适应(DA)算法相结合…...
AFFS2 的 `yaffs_ext_tags` 数据结构详解
YAFFS2 的 yaffs_ext_tags 数据结构详解 yaffs_ext_tags 是 YAFFS2 文件系统中用于 管理 NAND 闪存页的元数据 的核心结构体,存储在 NAND 的 OOB(Out-Of-Band)区域。它记录了数据块的归属、状态、校验信息等关键元数据,是 YAFFS2…...
CSS经典布局之圣杯布局和双飞翼布局
目标: 中间自适应,两边定宽,并且三栏布局在一行展示。 圣杯布局 实现方法: 通过float搭建布局margin使三列布局到一行上relative相对定位调整位置; 给外部容器添加padding,通过相对定位调整左右两列的…...
超声波传感器模块
欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 1.HC-SR04介绍2.HC-SR04原理介绍2.1原理概述3.2原理详解 4驱动代码编写4.1写前思考4.2硬件连线 5.总结hcsr04.hhcsr04.c 1.HC-SR04介绍 超声波传感器有很多种类的型号:HC-SR04、UC-025、…...
使用scp命令拷贝hadoop100中文件到其他虚拟机中
以下是使用 scp 命令将 hadoop100 主机中的文件拷贝到其他虚拟机的操作步骤(假设其他主机名为 hadoop101 、 hadoop102 ,系统为 Linux): 1. 基本语法 bash scp [选项] 源文件路径 目标主机用户名目标主机IP:目标路径 - 选…...
Linux基础 -- 用户态Generic Netlink库高性能接收与回调框架
用户态Generic Netlink库高性能接收与回调框架 一、概述 在 Linux 系统中,Netlink 是用户态与内核态通信的强大机制。libnl 是一个专为简化 Netlink 编程而设计的库,提供了接收和处理 Netlink 消息的高级接口。libnl-genl 是其通用 Netlink (Generic N…...
java中的Optional
在 Java 8 中,Optional 是一个用于处理可能为 null 的值的容器类,旨在减少空指针异常(NullPointerException)并提升代码的可读性。以下是 Optional 的核心用法和最佳实践: 1. 创建 Optional 对象 1.1 常规创建方式 Op…...
原型和原型链
原型(Prototype) 和 原型链(Prototype Chain) 是 JavaScript 中非常重要的概念,它们是 JavaScript 实现继承和共享属性和方法的核心机制。理解原型和原型链可以帮助你更好地掌握 JavaScript 的面向对象编程(…...
解锁Python TDD:从理论到实战的高效编程之道(9/10)
引言 在 Python 开发的广袤天地中,确保代码质量与稳定性是每位开发者的核心追求。测试驱动开发(TDD,Test-Driven Development)作为一种强大的开发理念与实践方法,正逐渐成为 Python 开发者不可或缺的工具。TDD 强调在…...
OpenMCU(七):STM32F103开发环境搭建
概述 本文主要讲述了使用Keil软件搭建STM32F103嵌入式开发环境的步骤,主要面向想从事嵌入式行业的入门同学,如果下面的讲述过程中有不对的地方,欢迎大家给我留言。 本文主要讲述了Keil 5.43的安装教程,主要用于学习交流…...
六、Hive 分桶
作者:IvanCodes 日期:2025年5月13日 专栏:Hive教程 在 Hive 中,除了常见的分区(Partitioning),分桶(Bucketing)是另一种重要且有效的数据组织和性能优化手段。它允许我们…...
INFINI Console 纳管 Elasticsearch 9(一):指标监控、数据管理、DSL 语句执行
Elasticsearch v9.0 版本最近已发布,而 INFINI Console 作为一款开源的非常轻量级的多集群、跨版本的搜索基础设施统一管控平台,是否支持最新的 Elasticsearch v9.0 集群管理呢?本文以 INFINI Console v1.29.2 为例,从指标监控、数…...
ansible进阶版01
ansible进阶版01 欢迎使用Markdown编辑器最佳实践保持简单 保持井然有序(有组织的)经常测试 git工作原理 chapter 2编写ymal格式的主机清单 欢迎使用Markdown编辑器 最佳实践 保持简单 使用yaml的原生语法使用自带模块尽量使用专用模块,不…...
python文件打包成exe文件
✅ 一、安装 PyInstaller 打开cmd,输入以下代码 pip install pyinstaller✅ 二、打包指令 比如说你有如下的文件需要打包。 首先复制你的文件所在目录,比如我的是C:\Users\Administrator\Desktop\BearingSearchSystem 在cmd中切换到该目录来…...
人脸识别系统中的隐私与数据权利保障
首席数据官高鹏律师创作 如今人脸识别技术以其高效、便捷的特性广泛应用于各个领域,从安防监控到移动支付,从门禁系统到社交媒体。然而,这项技术在为我们的生活带来诸多便利的同时,也引发了一系列关于隐私与数据权利的深刻担忧。…...
电脑关机再开机会换IP吗?深入解析分配机制
在日常使用电脑时,许多用户可能会好奇:关机后再开机,IP地址会不会变化? 这个问题看似简单,但实际上涉及多个因素。本文将详细解析电脑IP地址的变化机制,帮助大家理解其中的原理,并提供相关的…...
经典中的经典-比特币白皮书中文版
AI是一切假的集合,如果任凭AI如此聪明下去,所有的人都将被AI愚弄与股掌之间,那么能限制AI的只有区块链这个让一切数据都无处遁形的真神,而比特币作为区块链的鼻祖,开创了公开账本的先河,当互联网上所有的信…...
Spring事务失效的全面剖析
文章目录 1. Spring事务基础1.1 什么是Spring事务1.2 Spring事务的实现原理1.3 `@Transactional`注解的主要属性1.4 使用Spring事务的简单示例2. Spring事务失效的常见场景及解决方案2.1 方法不是public的问题描述问题示例解决方案技术原理解释2.2 自调用问题(同一个类中的方法…...
本地的ip实现https访问-OpenSSL安装+ssl正式的生成(Windows 系统)
1.下载OpenSSL软件 网站地址:Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 安装: 一直点击下一步就可以了 2.设置环境变量 在开始菜单右键「此电脑」→「属性」→「高级系统设置」→「环境变量」 在Path 中添加一个: xxxx\OpenSSL-…...
【go】binary包,大小端理解,read,write使用,自实现TCP封包拆包案例
binary.LittleEndian 是 Go 语言 encoding/binary 包中的一个常量,用于指定字节序(Byte Order)。字节序是指多字节数据在内存中存储的顺序,有两种主要方式: 小端序(Little Endian):…...
[万字]qqbot开发记录,部署真寻bot+自编插件
这是我成功部署真寻bot以及实现一个自己编写的插件(连接deepseek回复内容)的详细记录,几乎每一步都有截图。 正文: 我想玩玩qqbot。为了避免重复造轮子,首先选一个github的高星项目作为基础吧。 看了一眼感觉真寻bot不…...
国内USB IP商业解决方案新选择:硬件USB Server
在数字化办公日益普及的今天,USB OVER NETWORK技术,即USB IP技术,为企业带来了前所未有的便捷与高效。作为这一领域的佼佼者,朝天椒USB Server以其卓越的性能和贴心的设计,正逐步成为众多中国企业的首选USB IP商业解决…...