Patch是一个文本文件,他的内容类型类似于Git diff,但是除了代码之外,它还有关于提交的元数据如提交id,日期,提交消息等。我们可以通过提交创建一个补丁,其他人可以将他们应用到他们的仓库中。
主要是根据tag发布发行版本之后,如果有重大bug,但是下个发行版本还没有发布计划的情况下,可以打补丁,补丁可以用于更新部分代码,修复bug
上述流程步骤中,主要关键在于打补丁和应用补丁上,下面一一介绍
使用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开始顺序编号,并使用对应提交注释信息中的第一行作为文件名(只取英文字符)。
如果使用了
--numbered-files
选项,则文件名只有编号,不包含提交信息
- 可指定
-o <dir>
指定patch的存放目录
先检查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信息)