2011-01-07 74 views
72

我没有看到'git format-patch'和'git diff'的输出有区别,有没有?我不能使用'git diff'生成一个补丁,然后使用git apply?'git format-patch和'git diff'有什么区别?

我的问题是我有更改添加到索引,但显然git format-patch只接受提交,所以如果我可以使用diff的输出,那么我可以使用这个命令来产生一个补丁索引:

git diff --cached > index.patch 

回答

108

git format-patch创建也将包含有关提交一些元信息的补丁(提交者,日期,提交信息,...),并包含二进制数据的差异。一切都将被格式化为邮件,以便它可以轻松发送。接收到它的人可以用git am重新创建相应的提交,并且所有元数据都将保持不变。它也可以与git apply一起使用,因为它是一个简单差异的超集。

git diff一起打补丁将是一个简单的与上下文的差异(想想diff -u)。它也可以应用于git apply,但元数据不会被重新创建(因为它们不存在)。

总之,git format-patch对发送提交很有用,而git diff对于得到两棵树之间的差异很有用。

8

从手册git-format-patch准备适合邮件提交的补丁,而git-diff显示更改。

他们是两个不同的东西,有不同的目的,他们只是恰好输出一个补丁格式。但git-format-patch添加了有关提交(日期,作者,提交消息)的数据并将其捆绑为适合作为Unix邮件发送的格式(尽管这些只是文件,因此可以将它们发送到其他方法并仍然应用通过git-am)。

另外git-format-patch会为您指定范围内的每个提交生成补丁文件。这些更改将以git-am作为提交添加到您的存储库。

git-diff只显示您要求的两种状态之间的差异,可用于创建补丁文件。但这只是一个普通的补丁文件,应用补丁只会改变工作目录的状态。

是的,你可以用这种方式为你的索引创建一个补丁。

+0

谢谢。 UNIX邮件有什么特别之处,以便他们根据它设计补丁? – Rafid 2011-01-07 09:55:01

相关问题