18

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

我发现这git show -3将显示最后三个提交以及相同的额外信息。但是,git apply它将作为未暂存的更改将其全部压缩到工作目录中,并丢失所有提交信息。

git中有什么东西可以应用所有这些信息吗?只传递一个标志要比将补丁分成三个文件,分别应用它们并创建新提交要简单得多。

4

3 回答 3

11

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

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

当然,如果您想保存提交以供以后参考,为什么不直接标记它们呢?然后,您可以使用git cherry-pick.

于 2012-10-12T22:56:06.943 回答
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

例子:

  • 在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

于 2015-07-20T09:58:20.650 回答
2

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

于 2012-10-13T03:26:19.513 回答