当前位置: 首页 > 工具软件 > Patch-Master > 使用案例 >

09-Git-补丁patch操作

郝峰
2023-12-01

1. 介绍

Patch是一个文本文件,他的内容类型类似于Git diff,但是除了代码之外,它还有关于提交的元数据如提交id,日期,提交消息等。我们可以通过提交创建一个补丁,其他人可以将他们应用到他们的仓库中。

主要是根据tag发布发行版本之后,如果有重大bug,但是下个发行版本还没有发布计划的情况下,可以打补丁,补丁可以用于更新部分代码,修复bug

2. 流程

  1. 用户A创建了工程,提交了代码,打了tag,发行了tag
  2. 用户B下载了该tag,并且进行了应用
  3. 该tag可能有bug,用户A进行代码更新,并且打了补丁
  4. 这个时候,用户B需要应用补丁,应用最新的更改

3. 主要操作

上述流程步骤中,主要关键在于打补丁和应用补丁上,下面一一介绍

3.1 打补丁

使用git format-patch生成所需要的patch: 每一次提交都生成一个patch文件,包含代码和当次提交的元数据信息

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

  • 某次提交以后的所有patch:(不包含当次提交)
    git format-patch 分支的commitId

    git format-patch 93188a2
    
  • 从根到指定提交的所有patch:(包含当次提交)
    git format-patch --root 分支的commitId

    git format-patch --root 93188a2
    
  • 某两次提交之间的所有patch:(不包含头,包含尾)
    git format-patch 开始的commitId结束的commitId

    git format-patch 93188a2..9d616432
    
  • 某次提交(含)之前的几次提交:(从指定的提交开始(包含),倒数几次提交)
    git format-patch –个数 结束的commitId

    git format-patch -4 9d616432
    
  • 单次提交:
    git format-patch -1 要打的commitId

    git format-patch -1 9d616432
    

注意

​ 1. git format-patch生成的补丁文件默认从1开始顺序编号,并使用对应提交注释信息中的第一行作为文件名(只取英文字符)。

  1. 如果使用了--numbered-files选项,则文件名只有编号,不包含提交信息

    1. 可指定-o <dir>指定patch的存放目录

3.2 应用补丁

  • 先检查patch文件:

    git apply --stat [文件列表]

    git apply --start 0001-jasypt.patch
    
  • 检查能否应用成功:

    git apply --check 文件列表

    git apply --check 0001-jasypt.patch
    
  • 打补丁:

    git am --signoff < 文件列表

    git apply -s 0001-jasypt.patch
    

(使用-s或–signoff选项,可以commit信息中加入Signed-off-by信息)

 类似资料: