Git_diff和patch使用

Git 提供了两种补丁方案,一种是通过 git diff 生成的 .diff 文件,第二种是通过 git format-patch 生成的 .patch 文件。diff文件不会有commit信息。

git diff使用

git diff 指令能够生成diff文件也可以指定生成patch文件

1
2
3
4
5
6
7
8

git diff --cached 需要add 到本地,比较本地暂存区与上一版本的差异

git diff (文件名)--cached 比较指定文件与上版本差异

git diff HEAD^ -- ./>diff_sdk.patch 比较当前目录提交内容和上一提交版本差异输出到xxx.patch,若没add,则只显示已存在的文件修改

git diff <tagname> > xxx.patch 比较当前与tag 上 差异输出到xxx

git patch使用

git format-patch 指令可以生成patch文件,通过commit信息生成patch文件

1
2
3
4
git format-patch -M master 当前分支所有超前 master 的提交

git format-patch [commit id] 输出指定commit信息的patch文件

git apply

git apply 指令可以将patch文件应用到当前目录下

1
2
3
git apply xxx.patch 将patch文件应用到当前目录下
git apply --check xxx.patch 检查patch文件是否可以应用到当前目录下

git am

git am 指令可以将patch文件应用到当前分支下

1
2
3
在使用git am之前, 你要首先git am --abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am。

git am xxx.patch 将patch文件应用到当前分支下

问题:

1
2
patch does not apply

解决方法:
git apply –reject xxxx.patch

之后会生成后缀为 .rej 的文件,保存没有合并进去的部分的内容,可以参考这个进行冲突解决。