簡體   English   中英

Git如何插入其他共同祖先進行合並

[英]Git how to insert a different common ancestor for 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]

我該怎么做?

聽起來您應該按照您所說的去做:“提交到新分支”。 在基於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僅具有原始二進制文件, B具有Mod1 BinaryC具有Mod1 TextD具有Mod2 BinaryE具有Mod2 Text 新的提交F具有原始二進制文件和文本化版本。

此時,您可以再增加兩個(或實際上只有一個)分支,然后將git cherry-pick提交C到兩個新分支之一,切換到另一個分支,將git chery-pick提交E到另一個分支,並該圖片段:

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

現在,您可以合並文本文件(如果需要,可以忽略甚至刪除二進制文件)以獲取合並結果,然后可以將其導入回想要的任何原始分支,甚至可以直接從這組新分支中使用。

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM