掌握一个远程存储库到master另一个远程+一个

时间:2013-07-30 15:46:51

标签: git

我有两个远程存储库(说A和B)。 A有一个similer master(内容明智)到B,但不一样。

我想从B更新A,这样A就像B一样拥有相同的主人。我想从B强制更新A,这样A的主人就像B一样。我要做的如下。< / p>

1.将B的主人送到我当地。

2.将此推送给B。

但我不确定这是最好的方式,甚至是正确的方法

更新:这只是一次性活动。我不需要一直保持同步

2 个答案:

答案 0 :(得分:2)

如果我理解你正在寻找什么 - 一次性转换,而不是持续集成 - 这应该可行。这有点矫枉过正,因为你可以让它适应当前现有的本地仓库,但是我必须对本地仓库的当前状态做出假设,这种方法有助于避免由于未提交的更改引起的冲突,国家等。

git init newrepo                                   # create a new scratch space repo
cd newrepo
git remote add originA <url or relative path of A> # add both original repos as remotes
git remote add originB <url or relative path of B>
git fetch originA master                           # fetch the branches we want
git fetch originB master
git checkout -b newbranch originB/master           # start a new branch from B's master
git merge -s ours originA/master                   # merge A's master in, but ignore
                                                   # the content, so the result is
                                                   # exactly B
git push originA newbranch:master                  # push the new merged head to both
git push originB newbranch:master                  # original repos

在此之后,您可以删除临时存储库,返回正常的工作仓库,并在那里git fetch / git pull更新。此时,A和B已合并在一起,但内容与B完全相同,并且原始repos都已使用合并结果进行更新(并且A repo在某种意义上是冗余的,至少对于其{{ 1}}分支;如果其中没有任何其他工作,它也可能被清理掉)。另一种说法是,你的B仓库现在包含A和B的完整历史记录,以防你出于某种原因需要再回到A,但是A基本上被抛弃,转而支持B的开发。 / p>

答案 1 :(得分:1)

您可以从一个拉出来并使用强制推动覆盖另一个。

$ git pull A master
$ git push B master -f 

一般情况下,应该避免强制推力,因为你要删除你强行推进的分支中的所有历史和潜在差异。