我有两个远程存储库(说A和B)。 A有一个similer master(内容明智)到B,但不一样。
我想从B更新A,这样A就像B一样拥有相同的主人。我想从B强制更新A,这样A的主人就像B一样。我要做的如下。< / p>
1.将B的主人送到我当地。
2.将此推送给B。
但我不确定这是最好的方式,甚至是正确的方法
更新:这只是一次性活动。我不需要一直保持同步
答案 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
一般情况下,应该避免强制推力,因为你要删除你强行推进的分支中的所有历史和潜在差异。