3

我正在尝试从我的分支中的多个提交创建一个 git 补丁。但是,我需要从任意提交中创建它(它们不一定在一个范围内)。在我要创建补丁的提交之间,一些提交更改了补丁中的某些文件也可能已更改。

这是我的用例(假设更大的数字=更晚的提交日期):

develop HEAD
Commit 5 - Changed a.txt
Commit 4 - Changed a.txt, b.txt, c.txt
Commit 3 - Changed b.txt, c.txt
Commit 2 - Changed a.txt
Commit 1 - Changed a.txt, b.txt, c.txt, d.txt
master HEAD

现在我希望能够从开发分支为提交 1、3 和 5 创建一个补丁,并将它们应用到主分支。

我环顾四周,我能找到的只是在一个范围内创建补丁的能力。有没有办法为多个提交创建补丁,它们之间的文件可能发生变化?

4

1 回答 1

6

从 HEAD 中创建一个新分支master

git checkout master
git checkout -b newBranch

Cherry 在这里选择提交。

git cherry-pick commit1SHA
git cherry-pick commit3SHA
git cherry-pick commit5SHA

以此创建补丁。

git format-patch master --stdout > nameOfPatch.patch

现在,您想要将提交 1、3、5 从开发移动到主控。您可以简单地按照上述语句执行此操作,直到最后一个樱桃挑选然后:

git rebase -i HEAD~3

现在,选择第一个提交并压缩另外两个。您现在有一个单独的提交,它封装了所有其他三个提交。现在,只需挑选这个提交,squashedCommitSHA对大师说。

git checkout master
git cherry-pick squashedCommitSHA
于 2015-07-30T20:14:26.637 回答