我试图在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]
我该如何做到这一点?
答案 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
只有原始二进制文件,B
有Mod1 Binary
,C
有Mod1 Text
,D
有Mod2 Binary
},E
有Mod2 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。