简略记录下日常用到的 git patch 相干用法。
1. git format-patch/am
生成 patch
生成 patch,指定 commit id,针对它前面每一个 commit 别离独自生成 patch 文件。patch 文件依照 commit 的先后顺序从 1 开始编号。patch 文件会生成到当前目录下。
git format-patch ec06d35b
生成的 patch 例子
apply patch
apply patch 胜利后会 主动 commit,并且保留原来 commit 的 comments,submittor 等信息。
git am 0001-some-patch
2. git diff/git apply
生成 patch
A..B,生成 A 到 B 之间的 patch(不蕴含 A),A 是较早的 submit id
git diff ec06d35b..3280c7bb > 3280c7bb_somepatch.patch
apply patch
check patch,不理论 apply:
git apply --check 3280c7bb_somepatch.patch
apply patch:
不会主动像 git am 一样主动 commit,须要手动 commit,原来的 committor 和 comment 也不能保留。
git apply 3280c7bb_somepatch.patch
3. git diff/patch
git apply 对 patch 上下文查看比拟严格,如果 apply 失败,能够尝试用 patch 命令
apply patch
查看 patch,不理论 apply:
patch -p1 --dry-run < 3280c7bb_somepatch.patch
apply patch:
patch -p1 --dry-run < 3280c7bb_somepatch.patch
4. 手动批改 patch
有时候 patch apply 遇到问题,能够依据以后上下文,手动批改 patch 再进行 apply。也能够删除有问题的 hunk,patch 胜利后再手动批改(如联合 git commit –amend…)
上面是一个批改 patch 的例子:
批改前的 patch:
批改后的 patch:
这里加了一行 comments,此时须要同步 update patch 的行数批改信息。
其格局为 @@ -[起始行号],[批改前的行数] +[起始行号],[批改后的行数]
批改前的行数为上下文和 ’-‘ 局部的总行数,批改后的行数为上下文和 ’+’ 局部的总行数。其中上下文都须要空格结尾,包含空白行。