0

我有两个远程存储库(比如 A 和 B)。A 与 B 有相似的主人(内容明智),但不一样。

我想从 B 更新 A,以便 A 具有与 B 相同的主控。我想从 B 强制更新 A,以便 A 的主控与 B 相同。我要做的如下。

1.将B的主人带到我的本地。

2.把这个推到B。

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

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

4

2 回答 2

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 完全相同,并且两个原始 repo 都已使用合并后的结果进行了更新(并且 A repo 在某种意义上是多余的,至少对于它的master分支而言;如果其中没有任何其他工作正在进行,它可能也可以清理)。另一种说法是,您的 B 存储库现在包含 A 和 B 的完整历史记录,以防您出于某种原因需要回溯到 A,但 A 基本上已被丢弃以支持 B 的开发。

于 2013-07-30T16:06:14.383 回答
1

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

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

一般来说,应该避免强制推送,因为您要删除强制推送到的分支中的所有历史记录和潜在差异。

于 2013-07-30T17:30:22.347 回答