Git Commit生成与合入Patch指南分享

 更新时间:2025年08月01日 10:56:27   作者:龙之叶  
文章介绍了生成和应用补丁的两种方法:diff命令对比目录生成补丁(需路径一致或使用软链接),及Git format-patch生成特定提交的补丁,同时说明了使用patch命令合入补丁的步骤,包括忽略目录层级和撤销操作

1. 生成 Patch 文件

1.1 使用 Diff 命令生成 Patch

通过 diff 命令,可以为两个目录生成差异补丁,这对于文件夹内文件的修改非常有用,可以生成一个包含所有修改操作的补丁文件。

前提条件:

  • 需要对比的两个目录的顶层路径深度需一致。若不一致,建议使用软链接来满足此要求。

示例:

假设有两个目录:

  • 目录1:/media/data2/quectel/r12/cn_kj_r12a07/ql-ol-kernel/
  • 目录2:/tmp/sdk/cn_kj_r12a07/ql-ol-kernel/

可以通过以下命令创建软链接并生成补丁:

mkdir patch
ln -s /media/data2/quectel/r12/cn_kj_r12a07/ql-ol-kernel/ patch/new 
ln -s /tmp/sdk/cn_kj_r12a07/ql-ol-kernel/ patch/old

若只修改了部分目录(如 arch/arm/boot/dts/qcom,drivers,sound),则只需对比这些路径:

cd patch 
diff -Naur old/arch/arm/boot/dts/qcom new/arch/arm/boot/dts/qcom > gpio-export.diff
diff -Naur old/drivers new/drivers >> gpio-export.diff
diff -Naur old/sound new/sound >> gpio-export.diff

参数说明:

  • -N: 将不存在的文件视为空文件。
  • -a: 将所有文件视为文本文件处理。
  • -u: 输出差异时附带差异前后三行的内容。
  • -r: 递归比较所有子目录。

注意:

  • 确保生成的补丁中,对比文件路径的顶层路径一致,以便合并时能正确找到对应文件。

1.2 使用 Git Format-Patch 生成 Patch

在 Git 中,可以使用 git format-patch 命令生成特定 commit 的补丁文件。

步骤:

  1. 确保已提交想要生成补丁的 commit。
  2. 使用 git format-patch 命令生成补丁文件。

示例:

  • 生成最新提交的补丁:
git format-patch -1 HEAD
  • 为特定 commit 生成补丁:
git format-patch -1 <commit-hash>
  • 为一系列 commits 生成补丁:
git format-patch <commit-hash1>..<commit-hash2>

常用命令:

$ git format-patch HEAD^ # 生成最近的1次commit的patch
$ git format-patch HEAD^^ # 生成最近的2次commit的patch
$ git format-patch HEAD^^^ # 生成最近的3次commit的patch
$ git format-patch <r1>..<r2> # 生成两个commit间的修改的patch
$ git format-patch -1 <r1> # 生成单个commit的patch
$ git format-patch --root <r1> # 生成从根到r1提交的所有patch

2. 合入 Patch 文件

2.1 使用 Patch 命令合入

将生成的 .diff 或 .patch 文件复制到目标目录,然后使用 patch 命令合入。

示例:

cp gpio-export.diff /tmp/sdk/cn_kj_r12a07/ql-ol-kernel/
patch -p1 < gpio-export.diff

参数说明:

  • -p1: 合入时忽略第一层目录。例如,.diff 文件中的 new/sound/soc/soc-jack.c 路径,查找时会忽略 new/ 前缀。
  • -pn: 忽略 n 层目录。

撤销补丁:

patch -p1 -RE < /media/data2/quectel/r12/patch/gpio-export.diff

参数说明:

  • -R: 还原修改,即撤销合入的补丁。
  • -E: 删除合入补丁后的空文件。

通过以上步骤,您可以轻松地生成并合入 Git commit 的 patch 文件,从而方便地进行代码的审查和合并。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Windows 系统下的 Git 2.7 最新下载及安装教程图文详解

    Windows 系统下的 Git 2.7 最新下载及安装教程图文详解

    这篇文章主要介绍了Windows 系统下的 Git 2.7 最新下载及安装教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Git推送代码的7种高效方式

    Git推送代码的7种高效方式

    在 Git 中,推送代码(即将本地提交推送到远程仓库)有多种方式,每种方式适用于不同的协作场景和需求,以下是几种常见的推送代码的方式、结合完整示例说明,并以表格形式总结对比,需要的朋友可以参考下
    2025-08-08
  • gitee命令行上传项目的步骤详解

    gitee命令行上传项目的步骤详解

    这篇文章主要介绍了gitee命令行上传项目的步骤详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 在VS Code中配置Git的完整步骤记录

    在VS Code中配置Git的完整步骤记录

    git是一个版本管理工具,使用git之前,首先要进行配置,这篇文章主要介绍了在VS Code中配置Git的完整步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • 程序员用vscode听网易云的实现

    程序员用vscode听网易云的实现

    很多程序员在工作的时候都喜欢听歌,最近发现了一个vscode插件,可以直接使用vscode进行听歌,本文就详细的介绍一下如何使用,感兴趣的可以了解一下
    2021-12-12
  • 关于页面刷新,事件重复提交的方法分享

    关于页面刷新,事件重复提交的方法分享

    在处理页面事件时,我们会经常会碰到这样的情况:当我们在提交一项页面表单时,在提交成功后,当我们试图按F5刷新页面时,数据会再次的被重复提交
    2012-10-10
  • vscode eslint插件报错Parsing error: Invalid ecmaVersion问题

    vscode eslint插件报错Parsing error: Invalid 

    这篇文章主要介绍了vscode eslint插件报错Parsing error: Invalid ecmaVersion问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 基于rsync写脚本实现多节点多服务器文件一键同步的方法

    基于rsync写脚本实现多节点多服务器文件一键同步的方法

    这篇文章主要介绍了利用rsync写脚本实现多节点多服务器文件一键同步,本文将介绍 scp 和 rsync 两个命令及基本语法介绍,需要的朋友可以参考下
    2022-01-01
  • Git开发中的常用指令及其使用场景详解

    Git开发中的常用指令及其使用场景详解

    本文介绍了Git的安装、配置以及基本操作,包括创建和初始化仓库,常用命令如分支管理,提交和撤回操作,还涵盖了协作中遇到的拉取代码、解决冲突的场景,希望对大家有所帮助
    2026-05-05
  • github访问速度慢的问题完美解决

    github访问速度慢的问题完美解决

    这篇文章主要为大家介绍了github访问速度慢的问题完美解决方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论