'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一个补丁。