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

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