在git中,如何为最近2个以上的修订创建一个补丁?

Mat*_*hew 52 git patch

我想为最后2个版本创建一个补丁.

git format-patch -2
Run Code Online (Sandbox Code Playgroud)

给了我2个补丁文件,每个版本一个

git format-patch HEAD~2..HEAD
Run Code Online (Sandbox Code Playgroud)

给出同样的东西.

git format-patch -1 HEAD~2..HEAD
Run Code Online (Sandbox Code Playgroud)

提供单个文件,但仅包含上次修订的更改.

有没有办法在git中这样做?

Tob*_*obu 55

git diff HEAD~2..HEAD > my-patch.diff
Run Code Online (Sandbox Code Playgroud)

但它不会有任何format-patch的per-commit元数据.

  • 明显.如果这两个提交作者有不同的作者应该有什么作者?2-commit更改的提交消息应该如何?等等. (2认同)
  • 请注意,如果您使用功能分支,则只需执行`git diff master mybranch > my-patch.diff` 即可为该分支创建补丁。 (2认同)

JC *_*and 50

使用--stdout选项,然后将其捕获到文件中.

像这样:

git format-patch HEAD~2..HEAD --stdout > changes.patch
Run Code Online (Sandbox Code Playgroud)

这将保留每次提交的元数据.

  • 你得到的是一个mbox文件(连接的邮件文件),而不是一个补丁文件.您可以使用`git am`来应用它.您将无法使用标准工具来获取补丁文件. (3认同)

Von*_*onC 5

使用 Git 2.20(2018 年第 4 季度)及更高版本,您现在拥有:

  • git format-patch --interdiff
  • git format-patch --rangediff

两者都有助于解释此版本与求职信中之前的尝试(或在树破折号之后作为评论)之间的差异。

format-patch:允许--interdiff/--rangediff应用于单独的补丁

当提交补丁或系列的修订版本时,(对审阅者)以 Interdiff 的形式(通常在求职信中)包含自上次尝试以来的更改摘要可能会有所帮助。
然而,尽管会造成阅读噪音,但偶尔还是有用的,将 interdiff 或 rangediff 插入 1 个补丁系列的单个补丁的注释部分。

请参阅提交 ee6cbf7提交 3fcc7a2提交 3b02641提交 5ac290f提交 126facf提交 fa5b7ea(2018 年 7 月 22 日),作者:Eric Sunshine ( sunshineco)
(由Junio C Hamano 合并 -- gitster--提交 688cb1c中,2018 年 9 月 17 日)

因此,扩展“ git format-patch --interdiff=<prev>”以将差异插入到单独补丁的评论部分,而不需要附信。
差异之间的缩进是为了避免混淆git-am,避免人类读者将其视为补丁本身的一部分。

请参阅提交 40ce416提交 8631bf1提交 4ee9968提交 2e6fd71提交 31e2617提交 73a834e提交 2566865提交 87f1b2d(2018 年 7 月 22 日),作者:Eric Sunshine ( sunshineco)
(由Junio C Hamano 合并 -- gitster--提交 881c019中,2018 年 9 月 17 日)

因此,扩展“ git format-patch --range-diff=<refspec>”以将 a 插入range-diff到单个补丁的注释部分,而不需要附信。