乐趣区

关于git:git-patch常用方法

简略记录下日常用到的 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 的行数批改信息。
其格局为 @@ -[起始行号],[批改前的行数] +[起始行号],[批改后的行数]

批改前的行数为上下文和 ’-‘ 局部的总行数,批改后的行数为上下文和 ’+’ 局部的总行数。其中上下文都须要空格结尾,包含空白行。

退出移动版