如何针对指定目录生成 Git Patch 并精准应用到其他分支

Git部分代码迁移到其他分支:stash、cherry-pick与patch实战指南 在团队协作开发中,版本控制系统的分支管理是日常工作的核心环节。开发者经常需要将部分代码改动从当前分支转移到另一个分支,但面对工作区未提交的改动与已提交的历史记录,处理方式截然不同。理解Git的工作区、暂存区与提交记录之间的关系,是安全操作的前提。未提交的改动可以通过stash带路径暂存,或使用checkout精确覆盖文件;已提交的记录则应借助cherry-pick保留提交信息后重新应用;在跨仓库或无共同历史的场景下,patch补丁方案成为可靠选择。这些技术共同构成了分支间代码移植的完整工具箱,帮助开发者在功 阅读详情

在大型项目(如 Chromium 这类超大型仓库)的日常开发中,我们经常会遇到这样的场景:

在一个临时分支上解决了大量 merge 冲突,但工作区里还混杂着其他不相关的变更。现在需要把特定几个目录的解决结果,精准地迁移到另一个目标分支上。

这时候,git diff + git apply 的组合就是最优雅的解决方案。


背景:为什么不直接 cherry-pick 或 merge?

  • cherry-pick 依赖 commit 历史的匹配,如果两个分支的基础不同,很容易产生大量新冲突。
  • merge 会把所有变更都带过去,无法精准筛选。
  • patch 方式 可以只导出你关心的目录,干净、精准、可控。

第一步:只针对指定目录生成 diff

git diff 支持在命令末尾用 -- 指定路径,可以精准过滤出你需要的目录:

# 对比目标分支,只导出 chrome/app/ 和 extensions/ 两个目录的变更
git diff origin/target-branch -- chrome/app/ extensions/ > /tmp/chrome_app_ext.patch

如果变更已经 git add 进了暂存区(staged),用 --cached:

git diff --cached -- chrome/app/ extensions/ > /tmp/chrome_app_ext.patch

如果想对比某个具体的 commit:

git diff <base-commit>..HEAD -- chrome/app/ extensions/ > /tmp/chrome_app_ext.patch

第二步:在目标分支上应用 patch

切换到目标分支,先用 --check 做一次"预检",确认 patch 能否干净应用:

git checkout target-branch

# 预检,不实际修改文件
git apply --check /tmp/chrome_app_ext.patch

如果预检通过,正式应用:

git apply /tmp/chrome_app_ext.patch

第三步:遇到冲突怎么办?

如果目标分支和 patch 有冲突,直接 git apply 会报错退出。这时候加上 --3way 参数,Git 会自动产生冲突标记(类似 merge 冲突),让你手动解决:

git apply --3way /tmp/chrome_app_ext.patch

解决完冲突后,正常 git add + git commit 即可。


完整流程示例

# === 在 merge 分支上 ===

# 只导出 chrome/app/ 和 extensions/ 的变更
git diff origin/target-branch -- chrome/app/ extensions/ > /tmp/chrome_app_ext.patch

# === 切换到目标分支 ===
git checkout target-branch

# 预检
git apply --check /tmp/chrome_app_ext.patch

# 应用(如果有冲突用 --3way)
git apply --3way /tmp/chrome_app_ext.patch

# 提交
git add .
git commit -m "apply resolved changes from chrome/app and extensions"

小结

场景推荐命令
只导出指定目录的变更git diff <ref> -- path1/ path2/ > my.patch
干净应用 patchgit apply my.patch
有冲突时应用git apply --3way my.patch
预检 patch 是否可用git apply --check my.patch

这个方法特别适合 Chromium 这类超大型仓库的升核(内核版本升级)场景:在临时分支上完成 AI 辅助冲突解决后,只把属于自己业务的目录变更精准地 patch 到正式分支,避免引入无关的噪音变更。

Git switch实战指南:为什么分支切换该用switch而非checkout Git分支切换是日常开发中最频繁的核心操作,其本质是HEAD指针的重定向与工作区状态的安全协同。传统git checkout因职责过载(分支切换+文件还原+detached HEAD)导致高误操作率,而git switch通过命令职责分离、语法直觉化和内建安全拦截,显著降低认知负荷与事故风险。它专精于分支管理,配合git restore处理文件状态,构成现代Git安全操作范式。本文聚焦真实工程场景下的switch高频用法、远程协同、错误排查与IDE集成,助力团队提升协作效率与代码稳定性。 阅读详情

相关推荐

从零开始:用Git高效管理Jetson平台摄像头驱动开发(附完整工作流)

本文详细介绍了如何在Jetson平台上使用Git高效管理摄像头驱动开发,涵盖从初始化仓库到多平台分支策略的完整工作流。针对NVIDIA Jetson系列(如TX2、Xavier、NX)的特殊性,提供了MIPI-CSI2驱动开发中的Git高级技巧,包括设备树修改管理、patch文件生成和自动化CI/CD集成,帮助开发者实现跨平台高效协作。

s4t5u6v的博客 654

09-Git-补丁patch操作

文章目录1. 介绍2. 流程3. 主要操作3.1 打补丁3.2 应用补丁 1. 介绍 Patch是一个文本文件,他的内容类型类似于Git diff,但是除了代码之外,它还有关于提交的元数据如提交id,日期,提交消息等。我们可以通过提交创建一个补丁,其他人可以将他们应用到他们的仓库中。 主要是根据tag发布发行版本之后,如果有重大bug,但是下个发行版本还没有发布计划的情况下,可以打补丁,补丁可以用于更新部分代码,修复bug 2. 流程 用户A创建了工程,提交了代码,打了tag,发行了tag 用户B下载了该

HLH_2021的博客 1412

Git stash pop 原理与安全还原:分支切换时的上下文一致性保障

Git stash 本质不是临时提交,而是基于三路合并的带上下文补丁包,其核心依赖 stash 创建时的 commit 基础与当前 HEAD 的合并基础(merge base)一致性。当在不同分支间切换并执行 git stash pop 时,若两分支历史分叉较深,merge base 过于陈旧,patch 应用将因上下文偏移而失败——轻则静默丢弃修改,重则覆盖关键逻辑。这一机制决定了 stash 的技术价值不在‘暂存’本身,而在跨分支开发中对变更上下文的精准锚定与可控还原。典型应用场景包括前端多分支并行开发

weixin_30664615的博客 368

基于未合入PR创建增量patch的git管理方法

前言准备操作步骤精准移植基础PR到本地分支修改代码鸿蒙编译、调试、测试具体编译指令、测试步骤这里带过,这不是本文论述重点创建diff文件工作仓库应用最新patch总结作为程序员,多人协同开发同一个需求是正常的。即使是自己一个人搞需求,也会遇到自己所提的PR有多轮的检视,多次修改检视意见,提交到同一PR的场景。那么就存在基础PR在一段时间内始终处于未合入状态,而自己或其它合作人员需要基于基础PR(注意基础PR是动态变化,每打上新补丁,基础PR都会更新)做增量修改的情况。

钱塘江渔夫的专栏 763

Git rerere:自动解决重复合并冲突的隐藏神器

在团队协作开发中,版本控制系统是管理代码变更的核心工具,而合并冲突是开发者经常面临的挑战。其原理在于当多个分支对同一代码段进行不同修改时,Git无法自动决定保留哪个版本,需要人工介入。传统手动解决方式不仅耗时,且在相同冲突模式反复出现时,会造成大量重复劳动,影响开发效率。Git内置的rerere(Reuse Recorded Resolution)功能正是针对此痛点的工程实践解决方案。它通过记录冲突的“指纹”和对应的解决方案,在检测到相同冲突模式时自动复用历史方案,实现智能合并。这项技术对于维护长期分支、进

509

TortoiseGit 实战技巧:精准回退与版本拯救

本文详细介绍了TortoiseGit在版本控制中的实战技巧,重点讲解如何精准回退与拯救版本。通过Reset和Revert两种核心方式,帮助开发者应对误提交等紧急情况,同时提供硬重置的实战场景、安全回退远程分支的完整流程以及冲突文件的特殊处理技巧,确保版本控制的安全与高效。

weixin_28836989的博客 381

【Git 实战】将上游仓库指定目录的提交同步到下游仓库(新手友好)

本文介绍了一种在Windows环境下使用Git Bash安全同步上游Git仓库指定目录的方法。针对上游开源仓库与下游定制项目目录结构不一致的情况,提出了基于git format-patch+路径重写+git apply(3-way)的解决方案。详细步骤包括:添加上游remote、导出指定目录补丁、重写路径、应用补丁及冲突处理。相比直接merge或cherry-pick,该方法能精确控制提交范围,避免污染历史记录,适合长期维护的Fork项目。文章还提供了处理冲突的具体建议和方案优势总结,为Windows开发者

deary 798

从零开始:Vivado中自定义串口通信IP核的完整实现

本文详细介绍了在Vivado中从零开始实现自定义串口通信IP核的完整流程,包括Verilog核心代码编写、仿真验证、IP核封装与参数化配置技巧。通过AXI-Lite总线实现动态配置,提升FPGA开发效率,适用于各种嵌入式系统通信需求。

weixin_29274969的博客 324

Git---git stash(储藏到缓存中) 暂时保存未被提交的数据至堆栈中

1 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。 2 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,...

绝世唐门三哥的博客,多多关注,会不定期产出高质量文章和大家共享! 7353

TwinCAT3实战:从零搭建倍福PLC的Modbus-TCP Server

本文详细介绍了如何使用TwinCAT3从零搭建倍福PLC的Modbus-TCP Server,包括环境准备、工程配置、参数设置、客户端连接测试及常见问题排查。通过实战步骤和实用技巧,帮助工程师快速掌握倍福PLC与Modbus-TCP的通信实现,提升工业自动化项目的开发效率。

weixin_30797199的博客 173

如何使用apifox打包测试用例生成测试套件自动化执行

使用apifox打包测试用例生成测试套件自动化执行

weixin_55613512的博客 2886

Git文件级版本控制:精准提取commit或分支中的单个文件

版本控制系统中的文件级操作是开发中的常见需求,Git通过底层对象数据库实现精确的版本控制。其核心原理是将每个文件变更作为blob对象存储,通过tree对象组织目录结构。这种设计使得开发者可以精准提取特定版本的文件内容,在紧急修复、多分支并行开发等场景下特别有价值。实际工程中,git checkout和git restore命令支持从任意commit或分支提取文件,配合diff预览和冲突处理机制,能有效解决代码复用时的文件依赖问题。本文详细介绍如何通过热门的Git文件操作技巧,实现跨分支/commit的代码片

weixin_31842715的博客 260

stm32f407VET6 系统学习 day01 GPIO 配置

stm32f407VET6 系统学习 day01 GPIO 配置 LED 蜂鸣器 按键的不讲了,之前讲过了

she666666的博客 8904

Git 实用操作指南

个人Git使用大全总结

“Struggle”的博客 374

MicroPython ubluetooth 库详细介绍

MicroPython的ubluetooth库为蓝牙通信提供了强大的支持,使得开发者能够在MicroPython环境下轻松实现蓝牙设备之间的通信。其中ubluetooth库为MicroPython提供了强大的蓝牙通信功能,使得开发者能够轻松地在各种支持MicroPython的硬件平台上实现蓝牙设备之间的通信。它提供了一系列的函数和类,用于实现蓝牙设备的扫描、连接、数据传输等功能。- 上述代码中,首先创建了一个蓝牙服务和一个特征,然后可以通过read和write函数读取和写入特征值。# 处理连接成功事件。

m0_46311182的博客 1760

基于OpenAI Agents构建多智能体工作流:从原理到实战

多智能体系统(Multi-Agent System)是人工智能领域的重要分支,它通过多个智能体(Agent)的协作与交互,解决单一智能体难以处理的复杂任务。其核心原理在于将任务分解、分配与协调,每个智能体具备特定能力,通过通信机制实现信息共享与决策协同。在工程实践中,多智能体框架的价值在于提升任务处理效率、增强系统鲁棒性,并支持模块化开发。典型的应用场景包括自动化工作流编排、复杂问题求解以及人机协同交互。本文以OpenAI Agents SDK为例,深入探讨如何利用其提供的智能体(Agent)、会话(Ses

weixin_28725959的博客 603

通过二分查找,找到Linux kernel哪一个patch解决了问题。

4.18不可以---4.18-p3不可以-----------------4.18-p4可以--- 4.18-p10可以-- 4.19.0-rc1可以。4.18不可以--4.18-p2不可以--4.18-acpi不行-p3不行---ACPICA不行--ib不行---mail不行---plat不行---kernel-4.18 --- v4.19-rc1 --- v4.19-rc2 ……------4.18-harden可以---4.18-p4可以--- 4.18-p10可以-- 4.19.0-rc1可以。

千墨 的优快云《断剑情雪》《月颜牌》,本人文章全部免费,仅供学习。 501

【网络与爬虫 53】Scrapy-Prometheus实战指南:打造企业级爬虫监控体系的终极解决方案

本文深入探讨Scrapy-Prometheus集成技术,通过费曼学习法从监控痛点出发,详细讲解如何在Scrapy爬虫中集成Prometheus指标收集系统。涵盖从基础配置到企业级监控体系的完整实战指南,帮助开发者构建可观测性强、可维护性高的分布式爬虫监控平台,实现爬虫性能的精准监控和智能告警。

熵数实验室 1584

Git文件级操作技巧与实战场景解析

版本控制是软件开发中的核心基础设施,Git作为分布式版本控制系统,其文件级操作能力为代码管理提供了精细控制维度。通过差异比对(diff)和补丁应用(apply)机制,开发者可以精准提取特定commit或分支中的文件变更,这在处理热修复(hotfix)或模块化开发时尤为重要。典型应用场景包括:复用历史版本中的关键函数实现、合并其他分支的配置文件变更,以及选择性迁移重构代码。掌握checkout、cherry-pick等命令的文件级参数,配合临时分支策略,能有效解决电商支付模块更新、微服务配置同步等工程问题,同

weixin_28828243的博客 188

基于 Qt C++ 的智能工厂数字孪生系统

你想要实现一个基于 Qt C++ 的智能工厂数字孪生系统,核心是 **Qt 3D** 场景搭建 + **实时数据驱动** 设备模型。下面我将为你提供一个完整的解决方案,包含 **核心思路、实现步骤、完整代码示例** 和 **注意事项**。| **渲染层** | 3D 场景搭建、设备模型加载、实时动画渲染、用户交互。| **业务逻辑层** | 数据处理(滤波、转换)、设备状态管理、动画逻辑控制。| **数据层** | 实时采集设备数据(如传感器、PLC、MES 系统),提供数据接口。

寒寒豆豆软件公司的博客 193

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

开发者参考:epson_print_conf的EpsonPrinter Python API完整使用指南

`epson_print_conf` 是一款通过 SNMP(TCP/IP)管理 Epson 打印机的开源工具,核心类 [EpsonPrinter](https://link.gitcode.com/i/8d89e6aee7fee3416a2841eb3875c539) 提供了一套完整的 Python API:读取打印机状态、读写 EEPROM、重置废墨计数器、执行喷头维护。本文面向新手与开发者,系

gitblog_00958的博客 480

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Git提交历史管理:Cherry-pick精准操作与clean push安全推送实战

在现代软件开发中,版本控制是协作的基石,而提交历史的清晰度直接影响团队效率与代码质量。Git作为最主流的分布式版本控制系统,提供了强大的历史编辑能力,其中cherry-pick用于精准提取特定提交到目标分支,clean push则强调在保证不覆盖他人工作的前提下,将整理后的历史安全推送。理解提交对象的底层结构,掌握merge、rebase与cherry-pick的差异,是实现精准操作的关键。通过交互式rebase压缩琐碎提交,结合--force-with-lease这一安全强制推送参数,开发者可以既能保持远

weixin_27743991的博客 265

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Fleet migration-cleanup 实战指南:修复 RC 分支迁移重编号导致的 MySQL 迁移状态错乱

`migration-cleanup` 是 Fleet 仓库中用于修复 MySQL 迁移状态表(`migration_status_tables` / `migration_status_data`)的专项运维工具。当 release candidate(RC)分支对已发布过的迁移文件进行时间戳重编号(renumber),导致已跑过旧版迁移的数据库在启动 `fleet prepare db` 或新

gitblog_00666的博客 388

Git revert 原理与实战:安全回退误提交的协作黄金标准

Git revert 是一种基于版本控制系统底层对象模型的语义化历史修正机制,其核心原理是通过计算目标 commit 与其父提交的 diff 并执行逆运算,生成一个逻辑等价但内容相反的新 commit。不同于 reset 的指针重置和历史篡改,revert 严格遵循 Git 的不可变对象(commit/tree/blob)设计,保持有向无环图(DAG)完整性,从而保障多人协作、CI/CD 流水线稳定与审计合规性。该技术广泛应用于金融系统、SaaS 产品、嵌入式开发等对可追溯性与协作安全性要求严苛的场景。本文

weixin_30352191的博客 356

IntelliJ IDEA Git集成深度解析:从命令行到语义化开发工作流

Git 是现代软件协作的基础设施,而 IDE 内置的 Git 集成已超越简单封装,演进为具备状态感知、上下文理解与语义翻译能力的智能协同层。其核心在于将 `git commit` `git merge` 等原子命令,重构为可预演、可编辑、可回溯的可视化操作流;通过三层抽象(CLI 调用层、状态映射层、语义操作层),实现对工作区变更、分支生命周期与钩子执行的精准建模。这种设计显著提升团队提交效率、降低冲突解决耗时,并缩短新人 Git 协作学习曲线——尤其在 Java/Kotlin 项目中,与 Maven 依赖

weixin_34198881的博客 435

3个Git原生命令高效用法:log搜索、add暂存、reset回退

Git作为分布式版本控制的核心工具,其基础命令如git log、git add和git reset远不止表面功能。理解它们背后的查询引擎机制、暂存区状态管理逻辑与reflog时间快照原理,能显著提升开发者的代码追溯、变更隔离与操作容错能力。这些能力直接支撑CI/CD稳定性、团队协作一致性及个人开发流效率。尤其在微服务多仓库、高频提交、严格审计的工程场景中,掌握git log的内容感知搜索(-S/-G)、git add的交互式精准暂存(-p/-i/-u)以及git reset结合reflog的安全回退,已成为

weixin_32228501的博客 299
上一篇: 深入理解 Chromium Views 布局系统 —— LayoutManagerBase 的两种 GetPreferredSize 重载
下一篇: AI 时代的能力断层危机:当代码可以生成,工程智慧如何传承?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ปรัชญา แค้วคำมูล

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值