如何简单地从最新的git commit创建补丁?


186

我正在寻找从最后一次提交创建补丁的神奇命令。

我的工作流程有时看起来像这样

vi some.txt
git add some.txt
git commit -m "some change"

现在我只想写

git create-patch-from-last-commit-to-file SOME-PATCH0001.patch

但是我应该放在那里而不是create-patch-from-last-commit-to-file什么呢?



Answers:


297

一般来说,

git format-patch -n HEAD^

(请查看帮助中的许多选项),尽管实际上是用于邮寄它们。只需一次提交

git show HEAD > some-patch0001.patch

将为您提供可用的补丁。


18
注意“ git show HEAD> some-patch0001.patch”,如果在彩色终端中调用它,还将彩色转义序列复制到文件中。
hrach 2013年

12
您也可以使用git diff > change.patch。您还可以包括一个修订范围,它允许您为未提交的更改创建补丁。但是,最大的区别是它将不包括二进制文件中的差异。请参阅“ git format-patch”和“ git diff”之间的区别的答案有关更多详细信息。
朗伊·基恩

4
@hrach不在Linux上,不是
Robin Green

4
不,因为那不是第一行所说的。无论是git format-patch -1git format-patch -n HEAD^应该工作。
没用

4
谢谢,我不明白这是一个字母'n',我认为它是一个占位符(format-patch具有'-n'和'-<n>'选项)。
艾蒂安

60

从@Useless答案中获取数据,您还可以使用不带参数的一般形式进行最后一次提交,并将其放入文件中,并包含以下内容:

git format-patch HEAD^ --stdout > patchfile.patch

或者,当必须通过将符号加倍来逃脱插入符号时,为Windows用户更清洁:

git format-patch HEAD~1 --stdout > patchfile.patch

2
为我工作-谢谢。如果您碰巧使用Windows和Git,则必须逃避胡萝卜(我知道这很令人讨厌):“ git format-patch HEAD ^^ --stdout> patchfile.patch”
Steve Midgley

3
为了避免Windows必须退出该插入符号的问题(这使它看起来像另一个有效的git命令),可以使用的替代方法git format-patch HEAD~1。我认为这最终在Windows上减少了混乱。
Michael Burr

30

换句话说,如果具有该特定提交的提交ID,则可以使用,

git format-patch -1 {commit-id}

9

您需要使用-pgit log选项:

git log -1 -p --pretty='%b'

如果您不在乎文件开头/日期/主题行中的电子邮件,请使用此选项。
Ryan H.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.