Git 补丁— diff 和 patch 使用详解

article/2025/9/25 2:34:57

Git 补丁— diff 和 patch 使用详解

  • 1. diff 和 patch 的区别
  • 2. 生成patch
    • 2.1 git diff
    • 3. git format-patch
  • 3. 应用patch
  • 4. 冲突解决
  • 题外话

1. diff 和 patch 的区别

Git 提供了两种补丁方案,一种是通过 git diff 生成的 .diff 文件,第二种是通过 git format-patch 生成的 .patch 文件。

通过 git diff 生成的文件不含有 commit 信息,可以指定文件生成 diff,也可以指定单个 commit, 多个 commit 生成 。通过 git format-patch 生成的 .patch 文件 含有 commmit 信息。一个 commit 对应一个 patch 文件。

在实际开发中,我们会经常用到补丁,不论是在代码迁移,还是bug修复中,都时常使用。

2. 生成patch

2.1 git diff

指定文件生成 patch 文件

patch 补丁即为根据 git diff 生成的文本内容文件,最简单的生成方法为 git diff > test.patch。

举例子:比如我们修改了 A.java、B.java 文件,我们只想将 A.java 文件的修改打成 patch,那么我们可以使用以下的命令:
  git diff A.java > test.patch

想把所有的修改文件打成 patch,即 A.java、B.java 文件,只需要使用下面的命令:
  git diff > test.patch

指定 commit id 生成 patch

使用命令行
  git diff 【commit sha1 id】 【commit sha1 id】 > 【diff文件名】

3. git format-patch

当前分支所有超前master的提交:
  git format-patch -M master

某次提交以后的所有 patch:
  git format-patch [commit id]

	[commit id] 指的是 commit 名,可以通过 git log 查看。

从根到指定提交的所有patch:
  git format-patch --root 4e16

某两次提交之间的所有patch:
  git format-patch 【commit sha1 id】..【commit sha1 id】

举例:	
git format-patch 365a..4e16
–365a和4e16分别对应两次提交的名称

某次提交(含)之前的几次提交:
  git format-patch –n 【commit id】

举例:
git format-patch –n 07fe
–n 指 patc h数,07fe 对应提交的名称

故,单次提交即为:

  git format-patch -1 【commit id】

git format-patch 生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行作为文件名。如果使用了-- numbered-files 选项,则文件名只有编号,不包含提交信息;如果指定了–stdout选项,可指定输出位置,如当所有patch输出到一个文件;可指定 -o 指定 patch 的存放目录;

3. 应用patch

先检查patch文件:
  git apply --stat xxx.patch

检查能否应用成功
  git apply --check xxx.patch

打补丁:
  git apply xxx.patch

如果应用 patch 出现问题:

比如,一个典型的git apply失败,可能是这样的:
在这里插入图片描述
正如你所见,如果冲突发生,git只是输出上述信息,然后就停下来。一个小冲突会导致整个patch都不会被集成。

4. 冲突解决

当我们打补丁出现冲突的时候,这个时候需要我们手动解决冲突。

首先,执行以下命令,自动合入 patch 中不冲突的代码,同时保留冲突的部分
  git apply --reject xxxx.patch

同时会生成后缀为 .rej 的文件,保存没有合并进去的部分的内容,可以参考这个进行冲突解决。


题外话

在实际开发当中,我们 apply patch 的时候,通常会使用 git 图形工具,因为一旦产生冲突,解决比较方便,比较常用的 git 工具有 sourceTree, TortoiseGit(小乌龟)。


http://chatgpt.dhexx.cn/article/oZ4Nkv9L.shtml

相关文章

手把手教你使用patch-package给npm包打补丁

具体文档https://github.com/ds300/patch-package 一、背景 故事从日常团队协作开发展开,整个team使用react antd4搭建前端页面,在开发中我发现antd4.9.*版本的Input.TextArea组件存在一个bug,该bug表现为maxLength属性限制不符合预期&…

patch-package打补丁

如何修改node_modules源码? 首先,我们能想到的思路是直接修改第三方库的代码,不过这会带来团队协作的问题,你的改动需要同步到团队所有成员,比较麻烦。 好在,我们可以使用patch-package这个库来解决这类问题…

Git 打patch (打补丁)的使用

patch 的使用 一般是diff ,apply ,format-patch,am 1 生成patch git diff > test.patch 这个是打补丁(test.patch自己取的名字,这个命令可以看出没有指定修改的问题所以默认把所有修改的文件都打patch了,同时还需要注意,这里是本地修改的没有执行add缓存的) 如果想指定某…

linux基本功系列之fdisk命令实战

文章目录 前言一. fdisk命令介绍二. 语法格式及常用选项三. 参考案例3.1 列出每个分区的大小3.2 分区操作3.2.1 添加硬盘3.2.2 开启虚拟机并分区3.3.3 分区完成后进行格式化挂载 四 . 设置分区自动挂载 前言 大家好,又见面了,我是沐风晓月,本…

fdisk磁盘分区

fdisk磁盘分区 fdisk磁盘分区 fdisk磁盘分区文件系统类型fdisk分区过程 文件系统类型 EXT4 第四代扩展文件系统 存放数据 SWAP 交换文件系统 交换分区 fdisk fdisk 参数 fdisk -l 查看所有磁盘磁盘分区 fdisk命令 格式fdisk 磁盘设备 常用选项: m:查…

linux fdisk原理,fdisk详细剖析笔记

fdisk 简单使用 fdisk 工具原理就是修改磁盘的分区表,和分区信息。 查看帮助 #fdisk --help (1)磁盘列表 #fdisk -l (2)管理某个磁盘 #fdisk /dev/sdb 交互模式,可以直接m查看帮助信息,后面可以使用非交互模式,脚本自动格式化 磁盘…

Linux基础命令-fdisk管理磁盘分区表

文章目录 fdisk 命令介绍 命令格式 基本参数 1)常用参数 2)fdisk菜单操作说明 创建一个磁盘分区 1)创建分区 2)创建交换分区 参考实例 1) 显示当前分区的信息 2) 显示每个磁盘的分区信息 命令…

linux磁盘分区fdisk命令详解及云硬盘挂载实操

linux磁盘分区fdisk命令详解 1、什么是分区? 分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。 2、为什么要有多个分区? 防止数据丢失…

linux磁盘挂载之fdisk

linux磁盘挂载,使用fdisk命令 fdisk可以支持2T以下的分区的挂载,如果分区大于2T需要使用parted工具 磁盘情况查看 fdisk -l 可以看到有两块物理盘 名称磁盘符号磁盘大小备注Disk/dev/sda214.7G已分区Disk/dev/sdb1073.7G未分区 如果disk中有Device项…

fdisk分区命令

fdisk是Linux系统中最常用的分区工具,通过这个命令也可以查看系统中所有可用的分区,但是这个命令只支持MBR的分区表(这句话应该只对某些系统,CentOS7-1810适用,Debian9.5和openSUSE15应该已经支持GPT分区表,下面对fdis…

fdisk分区工具

fdisk分区工具 Linux磁盘分区步骤常见Linux分区方案 常见分区表MBR分区表使用fdisk进行分区fdisk手动创建主分区0查看磁盘详情1执行fdisk2选择新建分区3选择主分区4输入分区编号5输入起始扇区6输入结束扇区7查看分区表信息8保存分区9查看分区是否新增成功10同步分区信息11再次查…

linux中磁盘分区fdisk,管理磁盘分区之fdisk详解

Mozatr的不定期更新,处于学习阶段的Mozart,愿不断分享,不断进步。 此次分享一个重要的管理分区命令:fdisk ,我们一一阐述。 (一)分区 首先我们了解下什么是分区,分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁盘使用。分区表是一个…

一天一个 Linux 命令(26):fdisk 命令

本文为joshua317原创文章,转载请注明:转载自joshua317博客 一天一个 Linux 命令(26):fdisk 命令 - joshua317的博客 一、简介 Linux里的fdisk(英文全称:"Partition table manipulator for Linux&quo…

Linux命令之磁盘分区fdisk

概述 fdisk 命令可以查看磁盘分区情况和为磁盘进行分区。分区类似于让一个大房子用墙壁按照功能划分为卧室、厕所、厨房、阳台等。 注:物理硬盘可以分为一个或多个逻辑磁盘,称之为分区。但不要在当前的硬盘上尝试该命令,一定要再找一块新磁盘…

UNetVNet

Unet论文地址:https://arxiv.org/abs/1505.04597 Vnet论文地址:http://campar.in.tum.de/pub/milletari2016Vnet/milletari2016Vnet.pdf UNet被广泛应用于医学图像处理,encoder下采样4次,一共下采样16倍,对称地&#…

黑科技VNET——最好用的Android抓包神器

VNET是Android平台下功能最强大的网络抓包工具,支持HTTP&HTTPS,TCP&UDP,IPv6&IPv4,多终端显示,功能十分的强大。

[Azure - VNet] 解决办法:Azure P2S VNet无法建立网络连接。“parameter is incorrect“ (Error 87 参数错误)

问题描述: 在一台新服务器,尝试连接Azure的时候出现了如下错误,这台机器是一台新Server Win10配置。 使用Azure的P2S VPN连接时候出现参数错误87如下: “parameter is incorrect” (Error 87) 原因分析: 当尝试在IP…

安卓 VNET 抓取 快手极速版cookie 教程

请根据个人系统设置进行证书安装操作 图可以参考 下载抓包文件base.apk - 蓝奏云 文字描述: 打开 VNET>点击右下角 ▶ 保存 CA.pem 证书> 打开手机系统设置搜索 证书 >点击安装刚刚保存的 CA.pem > 返回 VNET > 点击 菜单 选择 添加应用 > …

安卓12使用VNET免ROOT抓包微信小程序

文章目录 一、安装软件1.蓝奏云2.百度网盘 二、使用步骤1.打开BlackBox642.打开VNET3.再次进入BlackBox64例:茄皇例:京东wskey 总结 图文示例机型:iQOO Neo5 一、安装软件 1.蓝奏云 https://wwz.lanzout.com/b03j2at4d 提取码:92h82.百度网…

tensorflow2实现vnet

没有在网上查到tensorflow2实现的vnet网络结构,自己写了一个,供自己和大家参考。 import warnings warnings.filterwarnings("ignore") import os os.environ[TF_CPP_MIN_LOG_LEVEL] 3from tensorflow.keras.layers import (Conv3D,PReLU,Inp…