我如何从历史上不同时刻的多次提交中制作git补丁?



我正在尝试从分支中的多个提交创建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创建一个补丁,并将它们应用到主分支。

我环顾四周,我所能找到的就是在一个范围内创建一个补丁的能力。是否有一种方法可以为多个提交创建一个补丁,并在它们之间的文件中进行潜在的更改?

master中创建一个新的HEAD分支

git checkout master
git checkout -b newBranch

在这里选择提交。

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

创建一个补丁。

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

现在,您想要将提交1,3,5从develop移到master。您可以按照上面的语句执行,直到最后一个选择,然后:

git rebase -i HEAD~3

现在,选择第一个提交并压缩其他两个。现在,您有一个单独的提交,封装了所有其他三个提交。现在,只需要挑选这个提交,说squashedCommitSHA到master。

git checkout master
git cherry-pick squashedCommitSHA

最新更新