Git如何为合并插入不同的共同祖先

时间:2016-03-07 20:48:21

标签: git git-merge

我试图在Git中合并两个不同的分支:

                         [Mod 1 binary] - [Mod 1 Text]
                    /                                 \
[Original(Binary)]                                      [CombinedText]   
                    \                                 /
                         [Mod 2 Binary] - [Mod 2 Text]

问题是我使用的合并工具只能处理文本文件,因此二进制文件不能作为共同的祖先。我想使用转换工具ant从原始二进制文件创建一个文本文件然后有一个这样的结构,所以我可以合并:

                                     [Mod 1 Text]
                                   /               \
[OriginalBinary] - [Original Text]                    [Combined Text]
                                   \                /
                                     [Mod 2 Text]

我该如何做到这一点?

2 个答案:

答案 0 :(得分:0)

听起来你应该完全按照你所说的去做:“在一个新的分支上提交”。在基于shell的会话中,您的任务可能如下所示:

$ git checkout -b work-br <commit-id>

(此处<commit-id>是包含OriginalBinary)的提交的ID,然后:

$ tool_cmd [options] binary [> text]  # or however this works
$ git add text
$ git commit

你现在有:

    B - C        <-- branch-1
  /
A
 \\
 |  D - E        <-- branch-2
 |
 |
  \
    F            <-- work-br

其中,提交A只有原始二进制文件,BMod1 BinaryCMod1 TextDMod2 Binary },EMod2 Text。新提交F包含原始二进制文本和文本版本。

此时你可以将两个(或者只是一个,真的)更多分支,然后git cherry-pick提交C到两个新分支之一,切换到另一个分支,{{1}将git chery-pick提交到另一个,并使用此图片段:

E

现在您可以合并文本文件(如果需要,忽略甚至删除二进制文件)以获得合并结果,然后您可以将其导回到您想要的任何原始分支,或者甚至直接从这个新集合中使用分支机构。

答案 1 :(得分:0)

$git replace --graft hash([Mod 1 Text]) hash([Original text])
$git replace --graft hash([Mod 2 Text]) hash([Original text])

git会合并[Mod 1 Text] [Mod 2 Text],就好像[Original text]是他们的共同父母一样。如果您愿意,可以稍后使用git replace -d hash([Mod 1 Text]) hash([Mod 2 Text])删除替换。

有关详细信息,请参阅https://git-scm.com/docs/git-replace