2016-12-13 256 views
1

我有从一个共同分出两条的Git分支提交,说分支A和分支B如何将两个分支分支并排合并成一个分支?

 -- a -- a' -- a'' (branch A) 
    /
-- o -- b -- b' -- b'' (branch B) 

双方承诺a''b''含有大量的现在被用于不同的应用,虽然类似的文件。我想保留两个文件结构在a''b''

现在,我想通过将B的内容添加到A的子目录中来合并两者。

样本情况将是script.py在提交o其中包含print ('original')。在分支A中,文件在整个一系列提交中变为print ('some feature A');而在分支B中,文件在一些提交中也变为print ('another feature B')

我怎么会现在结束的一个分支,我有文件

script.py (from A) 
B/script.py (from B) 
分别

print ('some feature A')print ('another feature B')为内容?

注:我想保持增量的历史记录,无论是A版的script.py和B版B/script.py的情况下才能够git blame两个文件。

+0

你很难理解你的情况和你想达到的目标。你想把'B'合并到'A'但保持'B'不变吗?如果是的话,我会建议从'B'创建一个新的分支,然后检查'A'并将其与'C'合并。 'B'仍然处于提交状态。 – sp1nakr

+0

@ sp1nakr这将工作在现有的文件/ HEAD之后的内容 - 然而,我会失去'A'的历史,从'A'和'B'分开的提交... – TheXMA

+1

东西沿着这些线但从相同的原始提交开始,而不是两个单独的存储库: https://saintgimp.org/2013/01/22/merging-two-git-repositories-into-one-repository-without-losing-file-history/ – TheXMA

回答

1

我想你想要的是git subtree。特别是,这个命令将完成你所描述的内容。

git subtree --prefix=B B 

假设你在运行分行A此命令,它会创建一个子目录B与现有的分支B整个代码库。历史记录将被保留并添加前缀,并且图表看起来像这样(m用于合并提交)。

-- o -- a -- a' -- a'' -- m (branch A) 
    \     /
     - b -- b' -- b'' - (branch B) 
相关问题