最近我一直在使用git show <hash>
创建差异供以后参考,因为它比git diff <hash>~ <hash>
更容易输入,它显示了提交信息(时间戳,用户,哈希,注释)。然后,您可以使用git apply <filename>
来应用修补程序。
我发现git show -3
将显示最后三次提交以及相同的额外信息。但是,git apply
会将其全部压缩到工作目录中作为非分段更改,并丢失所有提交信息。
git中是否有适用所有信息的内容?传递一个标志而不是将补丁分成三个文件,分别应用它们并创建新的提交将会简单得多。
答案 0 :(得分:7)
您可以使用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
重新应用来自它们的提交。
答案 1 :(得分:3)
在Linux中,您可以使用- @phases.order(:position).each do |phase|
%tr ...
命令管道 delta-generator --- git-show
或git-diff
,例如---。 p>
(始终启用与git-apply
选项的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
答案 2 :(得分:1)
尝试git bundle
发送历史记录的特定部分。