假设有两个分支,master
和slave
,它们编辑同一个文件的同一行。最初,文件的内容为:
foo bar
然后在分支slave
中进行编辑,以使其成为:
foo bar baz
现在,分支slave
的用户格式化补丁(git format-patch master
)并将其发送给分支master
的用户。同时,在分支master
中,同一文件被编辑并变为:
foo bar spam eggs
补丁无法应用,需要让“主”请求“从”合并并创建一个新的补丁。当“主”合并到“从”并解决了冲突后,就需要重新格式化补丁。提交图形看起来像这样:
slave: master:
foo bar baz spam eggs
| \
| \
| foo bar spam eggs
| |
foo bar baz |
\ |
\ |
+--------- foo bar
在 slave
分支上最新的提交(合并)看起来是:
@@@ -1,1 -1,1 +1,1 @@@
- foo bar baz
-foo bar spam eggs
++foo bar baz spam eggs
然而,如果我们现在运行git format-patch master
,我们仍然会得到与之前完全相同的补丁,这不考虑合并和冲突解决:
@@ -1 +1 @@
-foo bar
+foo bar baz
如何格式化一个补丁以便应用于最新的主分支?我想不使用
rebase
完成此操作。更新:使用
git format rev1..rev2
,其中rev1
和rev2
分别是master
和custom
分支的头部,但它不包括与冲突解决相关的更改。 git-diff
可以格式化一个有效的补丁,但省略了提交信息。
git-merge
不是应该“将两个或多个开发历史记录合并”吗? - sastanin