[英]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 Binary
, C
具有Mod1 Text
, D
具有Mod2 Binary
, E
具有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.