[英]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-show
或git-diff
,例如---。
(始终启用与-3
选项的3向合并也可能更安全)
> git show <sha1> [<path>] | git apply -3
> git diff <sha1-a> <sha1-b> [<path>] | git apply -3
例子:
> git show abcdef dir/file.c | git apply -3
> git diff abcdef 123456 foo.h | git apply -3
尝试使用git bundle
发送历史的特定部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.