如何将一个Git仓库重新绑定到另一个仓库?

我有一个Git仓库(A),其中包含一个项目的开发,直到某个点。 然后我失去了这个回购A的USB棒。 幸运的是我有最新的提交的备份,所以我可以在稍后导入最新项目的状态并继续开发的情况下创build新的存储库(B)。 现在我恢复了丢失的USB棒,所以我有两个Git仓库。

我想我只是不得不将rebo B重新设置为repo A,但我不知道该怎么做,也许使用fetch / pull和rebase?

如果A和B不是相同的回购(您使用最新的工作副本创build了B),则必须使用移植来假装他们有共同的历史。

假设你已经按照VonC的答案添加了A作为B的远程,并且回购看起来像这样1

~/B$ git tnylog * 6506232 (HEAD, master) Latest work on B * 799d6ae Imported backup from USB stick ~/B$ git tnylog A/master * 33b5b16 (A/master) Head of A * 6092517 Initial commit 

创build一个移植告诉B的根,它的父母是A的头:

 echo '799d6aeb41095a8469d0a12167de8b45db02459c 33b5b16dde3af6f5592c2ca6a1a51d2e97357060' \ >> .git/info/grafts 

现在,当您请求B的历史logging时,上面的两个历史将显示为一个。使移植永久化是一个简单的git filter-branch ,不带任何参数。 在过滤分支之后,虽然你不在任何分支,所以你应该git branch -D master; git checkout -b master git branch -D master; git checkout -b master


1 git tnylog = git log --oneline --graph --decorate

如果A和B是相同的回购(第一个SHA1是常见的),您可以:

  • 把B声明为远程: git remote add A /path/to/A
  • git fetch A 更新 B repo上的所有远程A分支
  • git checkout dev (在B上,你正在开发的地方)
  • git rebase A/devBranchA/devBranch (你丢失的开发)之上重放B(即你从你的备份开发或者重新开发)。 有点像这个问题 。

最后一步,您可以将您的开发人员与您丢失的开发人员进行同步。
但是实际上,一旦你从A中获取,你就完成了:B现在包含了“ 全部 ”历史(你丢失的那个和你当前的工作)

首先,从制作回购A的克隆开始

然后简单地从B中拉入并合并。 你可能更喜欢创build一个新的分支,拉到它,然后合并两个分支。 你可能还需要强制标志; 我在Mercurial中做过这样的事情(将两个显然不相关的资源库嫁接到一起),它需要“-f”。