繁体   English   中英

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

[英]Using `git show` to create and apply patches spanning multiple commits

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

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

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

您可以使用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重新应用它们的提交。

在Linux中,您可以使用git-apply命令管理delta-generator --- git-showgit-diff ,例如---。

(始终启用与-3选项的3向合并也可能更安全)

> git show <sha1> [<path>] | git apply -3
> git diff <sha1-a> <sha1-b> [<path>] | git apply -3

例子:

  • abcdef中生成的特定文件应用编辑:
> git show abcdef dir/file.c | git apply -3
  • 对两个不同的提交abcdef123456的文件应用差异

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

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

尝试使用git bundle发送历史的特定部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM