最近我一直在使用 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
。
您可以使用 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-show
要么 git-diff
,例如---与 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
- 对两个不同提交的文件应用差异 ABCDEF 和 123456
> git diff abcdef 123456 foo.h | git apply -3
也可以看看: https://stackoverflow.com/a/12320940/1329340
尝试 git bundle
用于发送历史的特定部分。