[英]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.