使用多个遥控器时Git Merges

时间:2016-10-17 18:32:53

标签: git

我的遥控器设置如下:

git remote set-url origin --push --add <a remote>
git remote set-url origin --push --add <another remote>

基于这个问题:pull/push from multiple remote locations

我团队中的其他人只能访问第一个回购。我有2台机器。我的第一台机器可以访问两个遥控器,如上所述。我的第二台机器只能访问第二台仓库。我的第一台机器git remote show origin显示(基于上面的配置):

Fetch URL:  <the_first_remote>
Push URL:    <the_first_remote>
Push URL:    <the_second_remote>

据我了解,您不能使用此方法获得两个抓取网址。从我的第一台机器开始,我通常对两个遥控器都执行git pull --rebasegit push,并在执行此操作时指定分支(在拉和推中都是这样)除了以下场景外,这种方式正常。在我只能访问第二个遥控器的第二台机器上,我将提交推送到第二个遥控器。与此同时,其他人仅将更改推送到第一个遥控器。在我的第一台机器上(两个遥控器都设置如上)我拉出两个更改并将它们推出以同步所有内容。此时我收到此错误消息

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart.

因此,我最终必须执行git pull(不使用--rebase)或git pull --no-commit进行合并。日志最终显示合并提交。有什么方法可以避免这种情况吗?

1 个答案:

答案 0 :(得分:3)

在您推送时自动自动推送所有这些网址时,通常只能将多个推送网址添加到单个遥控器。在这种情况下,最好使用两个单独的遥控器:

GodBinding [name=Zevs, age=320]

在你的第一台机器上,假设你在两个遥控器后面,请执行:

git remote add origin <first url>
git remote add gitlab <second url>

最后一行是修复错误的方法。由于您将提交重新定位到另一个用户的提交,因此您必须强制推送以更新第二个远程。

此外,请务必先拉出第二个远程 ,因为这样您就可以在本地进行提交,从而使git pull gitlab # --rebase should be unnecessary git pull --rebase origin master git push origin master git push gitlab master --force-with-lease 能够按预期工作。

可视化:您的历史可能如下所示:

pull --rebase

第一个pull命令会快速转发您的本地 C [origin/master] / *--*--*--A [master] \ B [gitlab/master] 以提交master。第二个命令将历史转换为如下所示:

B

因此最后两个命令:快进推送到 B' [master] / C [origin/master] / *--*--*--A \ B [gitlab/master] ,强制推送到origin

如果您已经例如以错误的顺序提取提交,您可以通过执行以下操作来解决此问题:

gitlab

然后按照上述步骤操作。