存储库A:我们现在正在处理的旧分支,但最近有数百个来自B的3年代码的提交。历史早已不复存在 - 它只会回归存储库首次上传到Github的几个月。
存储库B:我们无法访问的新的当前存储库。多年的历史。想要在完成后继续更新它的Master分支。
在某些时候〜3年前,存储库A是B的一个分支,然后从未与B保持同步。我们想改变它。我们希望成为存储库B,包含来自A的所有更改。
我认为需要发生的伪代码:
我希望得到一些建议,澄清和/或上述伪代码的翻译以及它的工作方式。
谢谢!
答案 0 :(得分:1)
从概念上讲,你想做的事情很简单;唯一复杂的因素是预期冲突的绝对数量。您可以做的一件事就是首先尝试将B
的旧提交合并到A
。假设你git clone B Blocal
后,你有这样的事情:
*---......-----* A/master
*---......-----* Blocal/master
不是一次性将B/master
合并到A/master
,而是以小块合并。
git remote add Blocal
git fetch
git merge <some old commit in Blocal/master>
,在确定可能少得多的冲突之后,您将拥有
M1
*--...---*-* A/master
/
*--....--*--...........................--* Blocal/master
其中M1
(以及Mi
一般来说下面的`)是合并提交。
然后,在Blocal/master
中稍微更新一次提交。
M1 M2
*--...---*-*--------*-* A/master
/ /
*--....--*--......--*--.....................--* Blocal/master
保持这种状态,一次只有Blocal/master
,直到你终于可以运行
git merge Blocal/master
获得类似
的内容 M1 M2 M3 Mn
*--...---*-*--------*-*--..--*-*--.....--*-* A/master
/ / / /
*--....--*--......--*--................--* Blocal/master
这样,您就不必立即处理所有合并冲突。您可以通过检查Blocal/master
&#39;历史,找到合并的好地方,导致更少的合并冲突。
完成合并后,您可以设置A/master
来跟踪真实B
,而不是本地克隆。
git branch --track B/master
答案 1 :(得分:1)
您可能最终导入的导入类似于How to import existing Git repository into another?中的情况。
听起来像你想要像Jörg在他的回答(https://stackoverflow.com/a/1684435/47392)中所建议的那样,这实际上是基于Linus Torvald的“Coolest Merge EVER”。