'git format-patch和'git diff'有什么区别?

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

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

git diff --cached > index.patch 

使用git format-patch patch创buildgit format-patch还将包含有关提交(提交者,date,提交消息等)的一些元信息,并将包含二进制数据的差异。 一切都将被格式化为一个邮件,以便它可以很容易地发送。 接收它的人然后可以用git am重新创build相应的提交,所有元数据都将完好无损。 它也可以应用与git apply因为它是一个简单的差异的超集。

使用git diff补丁将是一个简单的diff与context(think diff -u )。 它也可以用git apply来应用,但元数据不会被重新创build(因为它们不存在)。

总之, git format-patch对于传送一个提交很有用,而git diff对于在两棵树之间得到一个diff是很有用的。

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

他们是两个不同的东西,有不同的目的,他们只是碰巧输出一个补丁格式。 但是git-format-patch会添加关于提交(date,作者,提交信息)的数据,并将其捆绑成适合作为Unix邮件发送的格式(尽pipe这些只是文件,所以可以发送给其他人方法,仍然由git-am应用)。

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

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

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