Git创建和使用补丁patch

git format-patch (推荐)

适用于git的patch,包含diff信息,包含提交人,提交时间等 如果git format-patch 生成的补丁不能打到当前分支,git am会给出提示,并协助你完成打补丁工作

对比分支生成patch

例:从master checkout 一个新分支修改然后与master对比生成patch。

$ git format-patch -M master //-M选项表示这个patch要和那个分支比对
$ git am 001-xxx.patch(不必重新commit)

将commit打包成patch

\# 修改代码
$ vi drivers/bluetooth/btusb.c
\# 把代码添加到git管理仓库
$ git add .
\# 提交修改
$ git commit -m "some message"
\# 查看日志,获取到hash
$ git log 
\# 生成patch
$ git format-patch -s 1bbe3c8c19

或者也可以

$ git format-patch HEAD^ \# 最近的1次commit的patch
$ git format-patch HEAD^^ \# 最近的2次commit的patch
$ git format-patch HEAD^^^ \# 最近的3次commit的patch
$ git format-patch HEAD^^^^ \# 最近的4次commit的patch

测试,应用patch

\# 检查patch文件
$ git apply --stat xxx.patch

\#查看是否能应用成功
$ git apply --check xxx.patch

\# 应用patch
$ git am -s < xxx.patch

git diff

生成标准的patch,只包含diff信息

git diff 生成的Patch兼容性强,可以用git apply --check 查看补丁是否能够干净顺利地应用到当前分支中。

例:从master checkout一个新分支修改然后与master对比生成patch。

$ git diff master > patch
$ git apply xxx.patch(需要重新commit)