如何从我的最新git提交中简单创建一个补丁?

227

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

我的工作流程有时是这样的:

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?


2
一个好的资源:https://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git/ - Adam Ocsvari
1
需要的预备设置信息(我的问答):如何配置和使用git send-email与gmail一起发送补丁给开发者 - Gabriel Staples
6个回答

352

一般来说,

git format-patch -n HEAD^

(查看帮助以获取许多选项),尽管它确实是用于将邮件发送给他们。

对于单个提交,只需

git show HEAD > some-patch0001.patch

将会给你一个可用的补丁。


19
请注意使用 "git show HEAD > some-patch0001.patch" 命令时,如果在彩色终端中调用它,它也会将颜色转义序列复制到文件中。请小心。 - hrach
14
你还可以使用 git diff > change.patch。你也可以包含一个修订范围,它允许您为未提交的更改创建补丁(patch)。然而,最大的区别在于,它将不会包括二进制文件的差异。有关更多详细信息,请参见What is the difference between 'git format-patch' and 'git diff'? 的答案。 - Rangi Keen
4
@hrach 不在 Linux 上,它不会这样。 - Robin Green
4
不行,因为第一行的意思并不是这样。要么使用 git format-patch -1,要么使用 git format-patch -n HEAD^ 应该都可以。 - Useless
5
谢谢,我之前没理解到那个 'n' 字符是字面上的字母 'n',我以为它只是一个占位符(format-patch 命令有 '-n' 和 '-<n>' 两个选项)。 - Étienne
显示剩余6条评论

72

参考 @Useless 的回答,您也可以使用没有参数的常规形式表示最后一次提交,并将其放入文件中:

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

或者,对于Windows用户而言,当需要转义插入符时更加清晰易懂的方法是将插入符加倍:

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

3
对我有用-谢谢。如果您使用Windows和Git,您必须转义脱字号(我知道这很糟糕):“git format-patch HEAD^^ --stdout > patchfile.patch”。 - Steve Midgley
3
为避免 Windows 的问题,即必须转义插入符(^)(这会使其看起来像是一个不同的有效 Git 命令),您可以使用替代命令 git format-patch HEAD~1。我认为这样在 Windows 上会更少引起困惑。 - Michael Burr
1
使用命令 git format-patch HEAD^ -o ./patchfile.patch 生成补丁文件。 - OMKAR AGRAWAL

34
另一种方法是,如果您有特定提交的提交ID,则可以使用以下方式:
git format-patch -1 {commit-id}

17
git format-patch -1

对我来说做得到。


12

你需要使用-p选项来查看git log:

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

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

0

例如,如果您正在Github上推送代码到“branch_name”分支。该分支上的每个提交都有单独的URL。点击最新的提交。

  1. 在此URL末尾添加.patch。因此修改后的URL看起来像这样:https://github.com/xyz/lmn-ms/tree/branch_name.patch
  2. 然后将步骤1中出现的整个内容复制并粘贴到单独的本地文件中,并将其保存为.patch扩展名。
  3. 补丁已准备好使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接