我想创建一个针对最后两个版本的补丁。
git format-patch -2
给我两个补丁文件,每个文件对应一个版本。
git format-patch HEAD~2..HEAD
提供相同的内容。
git format-patch -1 HEAD~2..HEAD
在Git中有没有办法只获取最新版本的更改内容并保存为单个文件?
git diff HEAD~2..HEAD > my-patch.diff
不过它将不包含 format-patch 的每个提交元数据。
git diff master mybranch > my-patch.diff
来为该分支创建补丁。 - Matthew使用 --stdout 选项,然后将其通过 cat 命令输出至文件中。
就像这样:
git format-patch HEAD~2..HEAD --stdout > changes.patch
这将保留每个提交的元数据。
git am
应用它,但不能使用标准的补丁工具。 - Tobugit am
应用提交,因为它保留了提交的原样,而不是一个大的代码块... - Smargit format-patch origin/HEAD..HEAD --stdout > changes.patch
这样...天哪,它起作用了。 - Ray Fossgit rebase -i
进行操作。 - John Basila从Git 2.20(2018年第四季度)开始,您现在可以使用以下功能:
git format-patch --interdiff
。git format-patch --rangediff
。这两个功能都有助于解释此版本与封面信中的上一次尝试之间的差异(或作为注释放在树状线后面)。
format-patch
:允许--interdiff
/--rangediff
应用于单补丁当提交修订版的补丁或系列时,通常在封面信中包含自上一次尝试以来的更改摘要形式的interdiff(供审阅者参考)会很有帮助。
但是,尽管会产生噪音,但偶尔将interdiff或rangediff插入到单个1补丁系列的评论部分中仍然很有用。
请查看由Eric Sunshine (sunshineco
)于2018年7月22日提交的提交ee6cbf7, 提交3fcc7a2, 提交3b02641, 提交5ac290f, 提交126facf, 提交fa5b7ea。
(由Junio C Hamano -- gitster
--合并于2018年9月17日的提交688cb1c)
git format-patch --interdiff=<prev>
”扩展为将interdiff插入独立补丁的评论部分,而不需要一个封面信。缩进interdiff以避免混淆git-am
和读者认为它是正确的一部分。
请参阅 提交记录 40ce416, 提交记录 8631bf1, 提交记录 4ee9968, 提交记录 2e6fd71, 提交记录 31e2617, 提交记录 73a834e, 提交记录 2566865, 提交记录 87f1b2d (2018年7月22日) 由 Eric Sunshine (sunshineco
) 提交。
(在 提交记录 881c019 中由 Junio C Hamano -- gitster
-- 合并,2018年9月17日)
git format-patch --range-diff=<refspec>
”扩展到将range-diff
插入单独补丁的评论部分,而不需要一个封面信。git format-patch --range-diff=<commit hash>
会生成一个仅包含所需提交的补丁,并且不会在每个更改的文件中添加 PATCH 字母? - ZeroPhase$ git checkout -b tmp $ git reset HEAD~2 $ git commit -a分支tmp的提交将与两个单独的提交相同。
git rebase -i HEAD~2
,并进行压缩。 - Tobugit reset
可以消除一些额外的东西。评论中提供的rebase会更安全一些,因为它至少会告诉你工作树是否有变更。话虽如此,我认为这个答案还是有价值的。 - Smar
git diff master mybranch
来发送一个补丁进行审查,同时仍然保留我的小的提交历史(供自己使用)。 - Matthew