繁体   English   中英

如何为git中的最后N次提交准备和应用多个补丁

[英]How to prepare and apply multiple patches for the last N commits in git

我需要为最后N次提交创建一个补丁文件,并将它们作为单独的提交应用到另一个分支。 对于N = 3,我假设我必须这样做:

git diff HEAD~3 HEAD~2 >> diff1
git diff HEAD~2 HEAD~1 >> diff2
git diff HEAD~1 HEAD >> diff3

然后分别将它们应用于另一个分支:

git应用diff1
(推)
git应用diff2
(推)
git应用diff3

有没有更短的方法来做到这一点?

这可以分别使用git format-patchgit am来完成。 从您的示例中,尝试:

git format-patch HEAD~3

这将生成文件0001-commit-foo.patch0002-commit-bar.patch0003-commit-baz.patch 然后你可以将它们复制到另一个仓库并使用git am来应用它们:

git am *.patch

这将在您在上一个树中进行提交时保留提交,包括提交消息,SHA和时间戳。

尝试git cherry-pick提交到另一个分支(不需要创建临时补丁)。 这个问题回答了如何一次挑选多个提交: 如何挑选多个提交

您在评论中提到需要补丁,因为分支在不同的项目上。 那不是问题。 您可以为其他项目添加一个遥控器,即使它们没有共享历史记录,您也可以从中选择一个遥控器。 采摘樱桃不涉及祖先,它只是重播变化,就像补丁一样。


如果出于某种原因樱桃采摘对你来说真的不是一个选择(虽然我真的怀疑),你可以在Bash中使用循环,例如:

for ((i = 3, d = 1; i > 0; i--, d++)); do ((j = i - 1)); git diff HEAD~$i HEAD~$j > diff$d; done

您可以为git apply命令编写类似的循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM