git patch常用方法

简单记录下日常用到的git patch相关用法。

1. git format-patch/am

生成patch

生成patch,指定commit id,针对它后面每一个commit分别单独生成patch文件。patch文件按照commit的先后顺序从1开始编号。patch文件会生成到当前目录下。

git format-patch ec06d35b

生成的patch例子
git patch常用方法_第1张图片

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:
git patch常用方法_第2张图片

patch格式说明:
其格式为 @@ -[起始行号],[修改前的行数] +[起始行号],[修改后的行数]

修改前的行数为上下文和'-'部分的总行数,修改后的行数为上下文和'+'部分的总行数。其中上下文都需要空格开头,包括空白行。

修改后的patch:
这里加了一行comments,此时需要同步update patch的行数修改信息。

git patch常用方法_第3张图片

你可能感兴趣的:(gitdiffpatch)