我正在尝试从分支中的多个提交创建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