在git中,如何为最后2个+;修订版?

在git中,如何为最后2个+;修订版?,git,patch,Git,Patch,我想为最后2个修订版创建一个补丁 git format-patch -2 给我2个补丁文件,每个版本一个 git format-patch HEAD~2..HEAD 给了同样的东西 git format-patch -1 HEAD~2..HEAD 提供单个文件,但仅包含对上一版本的更改 在git中有什么方法可以做到这一点吗 git diff HEAD~2..HEAD > my-patch.diff 不过,它不会有任何格式修补程序的每次提交元数据。您可以执行以下操作: $ git c

我想为最后2个修订版创建一个补丁

git format-patch -2
给我2个补丁文件,每个版本一个

git format-patch HEAD~2..HEAD
给了同样的东西

git format-patch -1 HEAD~2..HEAD
提供单个文件,但仅包含对上一版本的更改

在git中有什么方法可以做到这一点吗

git diff HEAD~2..HEAD > my-patch.diff

不过,它不会有任何格式修补程序的每次提交元数据。

您可以执行以下操作:

$ git checkout -b tmp $ git reset HEAD~2 $ git commit -a $git签出-b tmp $git重置头~2 $git提交-a 提交到分支tmp将与两个单独提交相同。

使用--stdout选项,然后将其cat到一个文件

像这样:

git format-patch HEAD~2..HEAD --stdout > changes.patch
这将保留每次提交的元数据。

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

  • git格式修补程序--interdiff
  • git格式修补程序--rangediff
两者都有助于解释此版本与封面信中的上一次尝试之间的差异(或在树破折号作为注释之后)

格式化补丁
:允许
--interdiff
/
--rangediff
应用于单个补丁 在提交补丁或系列的修订版本时,将自上次尝试以来的变更摘要以中断的形式(通常在求职信中)包括在内(对审查人员)会很有帮助。
然而,在1-patch系列的单独补丁的评论部分插入interdiff或rangediff有时是有用的,尽管这会导致嘈杂的阅读

参见,,,,(2018年7月22日)作者。
(于2018年9月17日被合并)

因此,扩展“
git格式补丁--interdiff=
”,将interdiff插入到单独补丁的评论部分,而不需要一封求职信。
交叉点缩进以避免混淆
git am
和人类读者,使他们认为它是补丁的一部分

参见,,,,(2018年7月22日)作者。
(于2018年9月17日被合并)

因此,扩展“
git格式补丁--range diff=
”,将
range diff
插入到单个补丁的评论部分,而不需要一封求职信


或者
git-rebase-i HEAD~2
,然后挤压。哈,对一个已经超过6年的答案投了反对票!那是一些严肃的考古学。一句评论可以很好地解释这种嗜尸癖。我不是反对者,但我想这是因为有更简单、更安全的方法
git reset
可以消除一些额外的东西。注释中给出的重基会更安全一些,因为它至少会告诉您工作树是否脏。也就是说,我确实认为这个答案很有价值。这个答案帮助了我,因为我需要处理20多个提交…如果你添加了新文件/重命名了它们,这是一种危险的做法。你能告诉我们更多关于你想做什么的上下文吗?您是否意识到可以将提交与交互式重基挤压在一起?如果是这样的话,为什么你要压缩你发送给其他人的补丁,而不是你历史记录中相应的提交?@gbacon:在发布这个问题后不久,我就了解了rebase。你说得对,这是解决我问题的更好办法。不过,知道怎么做也无妨。@GregBacon:我现在经常做的一件事是:在一个功能分支中工作,进行许多小的提交。当要将树枝推到“主”位置时,先将其压扁。但在此期间,我使用
git diff master mybranch
发送一个补丁供审查,同时仍然保留我的小提交历史记录(供我自己使用)。很明显,可能是重复的。如果这两个提交有不同的作者,它应该有什么作者?2-commit更改的提交消息应该是什么样子?请注意,如果您使用功能分支,只需执行
git diff master mybranch>my patch.diff
即可为该分支创建修补程序。您得到的是一个mbox文件(连接的邮件文件),而不是修补程序文件。您可以使用
git-am
应用它。您将无法对修补程序文件使用标准工具。@Tobu:但您通常希望使用
git am
应用提交,因为这样会保留提交的原样,而不是一大块代码……有没有办法将源代码的头引用为refspec的开头?!这将是一个令人惊奇的事情,比如
git格式补丁源代码/HEAD..HEAD--stdout>changes.patch
。。。OMG表示,此解决方案比上述解决方案更好—如果存在二进制文件(例如机密文件),则它们将不包括在上述解决方案中。此解决方案还将把提交的完整列表生成一个大补丁文件,这非常棒-如果需要压缩,可以稍后使用
git-rebase-i
。因此,
git-format-patch--range diff=
生成一个只包含所需提交的补丁,并且每个文件更改后都没有补丁字母?@ZeroPhase无补丁字母,据我所知。()