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

Mey*_*sam 4 git diff git-diff git-apply

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

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

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

git apply diff1
(push)
git apply diff2
(push)
git apply diff3

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

nas*_*fin 8

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

git format-patch HEAD~3
Run Code Online (Sandbox Code Playgroud)

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

git am *.patch
Run Code Online (Sandbox Code Playgroud)

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