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

时间:2010-02-07 17:00:32

标签: git patch

我想为最后两次修订创建一个补丁。

git format-patch -2

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

git format-patch HEAD~2..HEAD

给出同样的东西。

git format-patch -1 HEAD~2..HEAD

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

有没有办法在git中执行此操作?

4 个答案:

答案 0 :(得分:50)

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

但它不会有任何format-patch的每个提交元数据。

答案 1 :(得分:44)

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

像这样:

git format-patch HEAD~2..HEAD --stdout > changes.patch

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

答案 2 :(得分:2)

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

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

这两种方法都有助于解释该版本与上一次求职信中的尝试(或在短划线后的注释)之间的区别。

  

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

     

提交补丁程序或系列的修订版时,(对审阅者而言)包括自上次尝试以来以interdiff形式出现的更改摘要(对求职信通常会有所帮助)。
  但是,尽管需要进行嘈杂的读取,但有时还是可以将interdiff或rangediff插入1-patch系列的单独修补程序的注释部分中。

请参见commit ee6cbf7,请参见commit 3fcc7a2commit 3b02641commit 5ac290fcommit 126facfcommit fa5b7eaEric Sunshine (sunshineco)(2018年7月22日) 。
(由Junio C Hamano -- gitster --commit 688cb1c中合并,2018年9月17日)

  

因此,扩展“ git format-patch --interdiff=<prev>”以将一个interdiff插入一个单独的补丁的注释部分,而不需要求职信。
  尽量避免使用interdiff,以免使git-am和人类读者感到困惑,认为它是补丁的一部分。

请参见commit 40ce416commit 8631bf1commit 4ee9968commit 2e6fd71commit 31e2617commit 73a834ecommit 2566865,{{3} }(2018年7月22日)作者:commit 87f1b2d
(由Eric Sunshine (sunshineco)Junio C Hamano -- gitster --中合并,2018年9月17日)

  

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

答案 3 :(得分:-1)

您可以执行以下操作:

$ git checkout -b tmp
$ git reset HEAD~2
$ git commit -a

分支tmp的提交将与2个单独的提交相同。