我想为最后两次修订创建一个补丁。
git format-patch -2
给了我2个补丁文件,每个版本一个
git format-patch HEAD~2..HEAD
给出同样的东西。
git format-patch -1 HEAD~2..HEAD
提供单个文件,但仅包含上次修订的更改。
有没有办法在git中执行此操作?
答案 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 3fcc7a2,commit 3b02641,commit 5ac290f,commit 126facf,commit fa5b7ea,Eric Sunshine (sunshineco
)(2018年7月22日) 。
(由Junio C Hamano -- gitster
--在commit 688cb1c中合并,2018年9月17日)
因此,扩展“
git format-patch --interdiff=<prev>
”以将一个interdiff插入一个单独的补丁的注释部分,而不需要求职信。
尽量避免使用interdiff,以免使git-am
和人类读者感到困惑,认为它是补丁的一部分。
请参见commit 40ce416,commit 8631bf1,commit 4ee9968,commit 2e6fd71,commit 31e2617,commit 73a834e,commit 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个单独的提交相同。