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



最近我一直在使用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-showgit-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

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

相关内容

  • 没有找到相关文章

最新更新