如何通过只知道分支名称来为给定分支中的所有提交生成补丁?
这一步骤是一个复杂工作流程的一部分,所有操作都将被自动化处理。因此,需要手动确定分支中第一个提交并不可行。
请注意,任何依赖于reflog的方法也不可行,因为分支中的更改并非在本地进行。
如何通过只知道分支名称来为给定分支中的所有提交生成补丁?
这一步骤是一个复杂工作流程的一部分,所有操作都将被自动化处理。因此,需要手动确定分支中第一个提交并不可行。
请注意,任何依赖于reflog的方法也不可行,因为分支中的更改并非在本地进行。
如果您知道“给定分支”是从哪个分支创建的,那么制作补丁就很容易:
git diff master Branch1 > ../patchfile
git checkout Branch2
git apply ../patchfile
(你也可以生成一个适用于非git的补丁)
但是找到分支的正确“创建提交”可能很复杂:请参见“如何使用Git查找分支点?”
OP akirekadu使用了:
git format-patch $(git merge-base --fork-point master)..branchB
您可以在 "工作副本和分支基础之间的git diff
" 中看到它的使用。
可以使用
git apply --stat patchfile
验证生成的补丁文件。
这不会应用补丁,但会给出补丁的详细信息。
$(git merge-base --fork-point master)..branchB
命令可能无法每次找到正确的分支根版本
顺便提一下,Phabricator 可以无缝处理这种情况,通过自动生成每个推送的补丁文件。
git merge-base --fork-point master
..branchB - akirekadugit format-patch \
git merge-base --fork-point master`..branchB`。 - akirekadu如果您已经提交并推送了更改,现在想要创建一个补丁文件。
即使您在该分支中有多个提交,这也将创建1个文件中的补丁。
步骤1:
像任何功能/错误分支一样检出要打补丁的分支
例如:git checkout <branch>
步骤2: 现在,这将为所有提交差异与主分支及您的检出分支(即上述检出的分支)创建一个补丁。
git format-patch master --stdout > mypatch.patch