Answers:
使用创建的补丁git format-patch
还将包含有关提交的一些元信息(提交器,日期,提交消息等),并且将包含二进制数据的差异。一切都将被格式化为邮件,以便可以轻松发送。然后,接收它的人可以使用重新创建相应的提交,git am
并且所有元数据都将保持完整。它也是git apply
简单diff的超集,因此也可以应用。
创建的补丁git diff
将是与上下文的简单差异(认为diff -u
)。它也可以与之一起使用,git apply
但是不会重新创建元数据(因为它们不存在)。
总而言之,git format-patch
对于传输提交git diff
很有用,而对于获取两棵树之间的差异很有用。
git-format-patch从手册中准备适用于电子邮件提交的补丁,而git-diff显示更改。
它们是两种不同的东西,具有不同的用途,它们只是输出补丁格式。但是git-format-patch
会添加有关提交的数据(日期,作者,提交消息),并将其捆绑为适合作为Unix邮件消息发送的格式(尽管这些只是文件,因此可以将它们发送到其他方法,并且仍然可以通过git-am)。
还会git-format-patch
为您指定范围内的每个提交生成补丁文件。这些更改将作为提交添加到您的存储库git-am
。
git-diff
仅显示您要求的两种状态之间的差异,可用于创建补丁文件。但这只是一个普通的修补程序文件,应用修补程序只会更改工作目录的状态。
是的,您可以通过这种方式为索引创建补丁。
可以使用git diff
命令生成补丁文件,但与git format-patch
命令生成的补丁相比,主要区别是:
为所有更改的文件(在索引或工作目录中)生成补丁文件:
git diff HEAD --binary > my.patch
# git diff + git diff --cached/staged == git diff HEAD
要应用生成的补丁文件:
# restore the changed files firstly
git restore --staged .
git restore .
# apply the patch to redo the changes
git apply my.patch
# or
patch -p1 < my.patch