如何合并两个git仓库,保留两者的历史记录和一个仓库的哈希值?
如何合并两个git仓库,保留两者的历史记录和一个仓库的哈希值?
我拥有的内容
我已经阅读了很多关于合并git仓库的SO问题。我已经接近成功,但还有一些问题。
我有两个仓库current-repo
,已发布和共享,以及old-repo
,未发布且只有一份拷贝。它们的历史看起来是这样的:
1--2--3--4--5 <= current-repo
=
内容相同
=
old-repo => a--b--c--d--e
我想要的
理想情况下,通过合并这两个仓库,我希望得到一个具有以下历史的仓库:
1. a--b--c--d--1--2--3--4--5 <= 注意,重复的旧条目"e"被删除"
我也可以接受以下情况:
2. a--b--c--d--e--1--2--3--4--5 <= "e"和"1"中有重复内容 3. foo--bar--baz--buz--1--2--3--4--5 <= 类似于上面的#1,但重新计算了"old"的历史 4. foo--bar--baz--buz--bif--1--2--3--4--5 <= 类似于#4,但"bif"和"1"具有重复内容
我尝试过的
我可以通过以下步骤(在本地)达到这一点:
cd ~/current-repo git remote add -f old-repo ~/old-repo git replace -f --graft 1 d
现在,我理解的是此时我需要推送/拉取refs/replace/*
。但我不希望我的用户进行这一步骤。
我看到的git graft
(或许还有一些git replace
)解决方案中,都有一个git filter-branch
步骤。我尝试了这个方法,还尝试了git rebase
,但只有current-repo
历史中的哈希被重新编写了。我也不希望这样。我不在乎old-repo
的历史是否被重新哈希。正如我之前提到的,该仓库并未发布和共享。基本上,当我的用户下次执行git fetch
时,他们将得到大量旧的历史,除了他们可能错过的任何"新"历史。
简而言之
我希望合并两个git仓库,保持线性历史,并保持"较新"仓库的哈希。如何获得我所选择的历史(如上所示)或类似的历史?