我有一个Git存储库(A),它包含一个项目的开发,直到某个时间点。然后我弄丢了这个repo A所在的U盘。幸运的是,我有一个最新提交的备份,所以我可以稍后创建一个新的存储库(B),在那里我导入了最新项目的状态,并继续开发。现在我找回了丢失的U盘,所以我有两个Git存储库。
我想我只需要以某种方式将repo B重新设置为repo A,但我不知道如何做到这一点,也许使用fetch/pull和rebase?
发布于 2010-03-12 03:59:48
如果A和B是相同的存储库(第一个SHA1是公共的),您可以:
在B repo
git checkout dev上声明A为B的遥控器:git remote add A /path/to/A
git fetch A to update all remote A branches (在B上,在B上,您可以在A/devBranch (即您丢失的开发)之上重播B(即您从备份开发或重新开发的内容)。有点像这个SO question.最后一步是让你的dev和你丢失的那个同步。
但实际上,一旦你从A获取,你就完成了:B现在包含了“所有”的历史(你丢失的历史和你当前的工作)
发布于 2021-04-30 22:33:51
2021更新
git filter-branch自Git2.24 (Q4 2019)以来一直是deprecated。相反,对于A和B不是同一存储库的情况,您可以使用git replace --graft 。
请参见:
发布于 2010-03-12 04:01:18
首先,从创建repo A的工作克隆开始。
然后简单地从B中拉入并合并。您可能更喜欢创建一个新的分支,拉到它上,然后合并这两个分支。您可能还需要一个强制标志;我在Mercurial中做过这样的事情(将两个明显不相关的存储库移植到一起),它需要"-f“。
https://stackoverflow.com/questions/2428137
复制相似问题