2011-06-17 41 views
5

我们假设有两个分支,masterslave,它们编辑相同的文件和相同的行。最初,该文件的内容是如何在Git合并后重新格式化修补程序?

foo bar 

然后在分支slave它被编辑成为

foo bar baz 

现在分支slave的用户格式化补丁(git format-patch master)并将其发送到用户的分支master。在同一时间,在分支master同一个文件进行编辑,并成为

foo bar spam eggs 

不能应用的补丁,并master要求slave合并,并作出新的补丁。当master合并到slave并且冲突得到解决时,是时候重新格式化修补程序。提交图形看起来是这样的:

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,其中rev1rev2分别为mastercustom分支机构的负责人,不包括与解决冲突有关的变化。 git-diff格式化有效的修补程序,但省略提交消息。

回答

1

你为什么使用补丁?你应该在回购之间进行推拉。

合并是不是你可以从一个补丁。它将仅遵循第一个父母。您可以通过使用git diff和格式化补丁来获得想要的结果,同时指定2个不同的提交以区分它们。

希望这会有所帮助。

+0

我使用补丁,因为这是上游想要的,而我不在工作流的控制之中。我必须将需要解决冲突的补丁格式化,因为我也发布了我的回购并且不能重新分配。不幸的是,'git diff'不包含提交消息。 – sastanin

+0

有一种方法可以让合并只有一位家长。从中获得补丁将为您提供所需的结果。 –

+0

仅与一位家长合并?这怎么可能? “git-merge”是否应该“将两个或更多的开发历史结合在一起”? – sastanin

相关问题