概述
一、diff 和 patch 的区别
Git 提供了两种补丁方案,一种是通过 git diff 生成的 .diff 文件,第二种是通过 git format-patch 生成的 .patch 文件。
- 通过 git diff 生成的文件不含有 commit 信息,可以指定文件生成 diff,也可以指定单个 commit, 多个 commit 生成 。
- 通过 git format-patch 生成的 .patch 文件 含有 commmit 信息。一个 commit 对应一个 patch 文件。
二、生成补丁
1. git diff
(1) 指定文件生成 patch 文件
git diff <filename> > test.patch 或 test.diff
eg. 比如我们修改了 Test.java,Test1.java 文件,我们只想 patch Test.java 文件,那么我们可以使用以下的命令
git diff Test.java > test.patch
想把所有的修改文件打成 patch,即 Test.java,Test1.java 文件,只需要使用下面的命令
git diff > test.patch
(2) 指定 commit id 生成 patch
使用命令行
git diff 【commit id 1】 【commit id 2】 > patch/diff文件名
2. git format-patch
当前分支所有超前master的提交:
git format-patch -M master
某次提交以后的所有 patch:
git format-patch [commit id]
[commit id] 指的是 commit id,可以通过 git log 查看。
从根到指定提交的所有patch:
git format-patch --root [commit id]
某两次提交之间的所有patch:
git format-patch [commit id 1]..[commit id 2]
eg. git format-patch 365a..4e16 //–365a和4e16分别对应两次提交的commit id
某次提交(含)之前的几次提交:
git format-patch –n [commit id]
–n 指 patch数,
生成某次 commit 的 patch 文件:
git format-patch -1 [commit id]
git format-patch 生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行作为文件名。如果使用了-- numbered-files 选项,则文件名只有编号,不包含提交信息;如果指定了–stdout选项,可指定输出位置,如当所有patch输出到一个文件;可通过 -o <dir> 指定 patch 的存放目录。
git format-patch -3
过程是,将HEAD和HEAD^相比,生成0003.xxx.patch, 将HEAD^和HEAD^^相比,生成0002.xxx.patch, 将HEAD^^和HEAD^^^相比,生成0003.xxx.patch
git am时可以依编号从小到大进行,也可以git am path/*.patch(git am会自动依编好从小到大进行)
三、应用补丁
1. 检查 patch/diff 文件:
git apply --stat xxx.patch
检查能否应用成功
git apply --check xxx.patch/xxx.diff
2. 打补丁:
针对 git diff 生成的补丁:
git apply xxx.patch/xxx.diff
针对 git format-patch 生成的补丁:
git am xxx.patch
四、冲突解决
定位和解决git am冲突的方法_一程山水一程歌-CSDN博客
五、其他
1、包含二进制文件时的diff和apply
git diff HEAD^..HEAD --binary > foobar.patch
https://cloud.tencent.com/developer/article/1423939
https://www.jianshu.com/p/ec04de3f95cc
最后
以上就是苗条超短裙为你收集整理的Git 补丁 —— diff 和 patch 使用详解的全部内容,希望文章能够帮你解决Git 补丁 —— diff 和 patch 使用详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复