简单记录下日常用到的git patch相关用法。
1. git format-patch/am
生成patch
生成patch,指定commit id,针对它后面每一个commit分别单独生成patch文件。patch文件按照commit的先后顺序从1开始编号。patch文件会生成到当前目录下。
git format-patch ec06d35b
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:
这里加了一行comments,此时需要同步update patch的行数修改信息。