使用`git show`创建和应用跨多个提交的补丁

red*_*bmk 13 git diff patch git-show

最近我一直在使用git show <hash>创建差异供以后参考,因为它比键入更容易,git diff <hash>~ <hash>并且它显示了提交信息(时间戳,用户,哈希,注释).然后,您可以使用git apply <filename>该补丁.

我发现git show -3将显示最后三次提交以及相同的额外信息.但是,git apply将它作为非分段更改压缩到工作目录中,并丢失所有提交信息.

git中是否有适用所有信息的内容?传递一个标志而不是将补丁分成三个文件,分别应用它们,并创建新的提交,会简单得多.

Lil*_*ard 10

您可以使用它git format-patch来生成表示提交的MIME电子邮件,包括其元数据(消息,作者等).然后,您可以重新应用这些git am.

因此,git format-patch HEAD~3将为最后3次提交生成3个补丁,然后您可以将这些补丁全部导入git am.如果您想要更简单,git format-patch --stdout HEAD~3将在stdout上发送MIME消息,这样您就可以将它们管道传送到您想要的位置,而不是处理3个单独的文件.

当然,如果你试图保存提交以便稍后引用,为什么不只是标记它们呢?然后,您可以使用它们重新应用它们的提交git cherry-pick.


Cam*_*mpa 7

在 Linux 中,您可以通过管道连接您的delta-generator ---git-show或者git-diff,例如 --- 使用git-apply命令。

(始终使用该-3选项启用 3 路合并也可能更安全)

> git show <sha1> [<path>] | git apply -3
> git diff <sha1-a> <sha1-b> [<path>] | git apply -3
Run Code Online (Sandbox Code Playgroud)

例子:

  • abcdef 中对特定文件应用编辑:
> git show abcdef dir/file.c | git apply -3
Run Code Online (Sandbox Code Playgroud)
  • 在两个不同提交abcdef123456的文件上应用差异

> git diff abcdef 123456 foo.h | git apply -3

另见:https : //stackoverflow.com/a/12320940/1329340