简略记录下日常用到的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的行数批改信息。
其格局为 @@ -[起始行号],[批改前的行数] +[起始行号],[批改后的行数]
批改前的行数为上下文和'-'局部的总行数,批改后的行数为上下文和'+'局部的总行数。其中上下文都须要空格结尾,包含空白行。