在git中使用多个远程仓库

7

我正在开展一个新项目,想要从GitHub上找到一个种子项目开始。
我已经将种子项目克隆到本地,当我执行以下命令时,它现在显示了1个远程分支:

git remote -v

然而,我想要在这个仓库中添加一个新的远程,并将所有更改或源代码扩展到这个私人仓库。

添加新的远程后,现在我能够看到此仓库中存在两个远程。

如何在两个远程之间切换?
我不认为像 git checkout 这样的命令可以在从两个不同远程获取的 2 个分支上工作时起作用。


VonC 是正确的,当推送到远程或定义跟踪分支以自动化关系时,您只会考虑远程。您可以自由地将任意数量的内容推送到任何远程,跟踪分支只是设置默认值。 - scipilot
2个回答

12
您不能直接“切换”,只需提到您想要使用的遥控器名称即可:
如何在两个遥控器之间切换?
您不能直接“切换”,只需提到您想要使用的遥控器名称即可:
git push origin
# or
git push remote2

那么,您可以从一个远程拉取并推送到另一个远程(pull from one remote and push to another)
您甚至可以仅使用一个默认的远程(origin),并设置不同的推送URL:
git remote set-url --push origin user@example.com:repo.git

我认为像git checkout这样的命令,在从两个不同的远程库拉下来的两个分支上操作时是不起作用的。

git checkout更适合于本地分支。
您可以基于远程跟踪分支创建一个本地分支:

git checkout -b abranch remote2/abranch

另一个远程库是我的私人远程库,我主要会在那个远程库上工作并进行拉取和推送。
在上游远程库上,我只会进行拉取操作。

这就是 三角工作流 的定义:

enter image description here

你像往常一样从 origin 克隆,但是从上游获取(fetch)。
$ git remote add upstream https://github.com/atom/atom
$ git fetch upstream

根据origin/abranch创建本地分支,但不要忘记在从upstream获取新提交时将该分支变基到upstream/abranch之上。
git checkout -b abranch origin/abranch
git rebase upstream/abranch
git push --force

谢谢VonC,我已经尝试过了。我创建了一个本地分支来跟踪远程分支之一,当我对该分支进行更改并尝试使用命令git push origin master时,它会要求我提供repo的凭据,这是正确的,提供凭据后,它只会给出消息Everything is up-to-date,这非常令人困惑,因为我无法推送到添加的远程分支。 - Zeeshan Jan
我刚刚尝试了这个 git push origin,在远程仓库中不指定分支名称也可以正常工作。 - Zeeshan Jan
@ZeeshanJan,你先提交了吗?如果提交了,你是在分离的HEAD状态下吗?https://dev59.com/CG865IYBdhLWcg3wIrFg#3965714 - VonC
@ZeeshanJan 好的:执行 git branch -avv 命令,查看本地分支与远程跟踪分支的关联情况。 - VonC
我已经附上了命令结果的屏幕截图:http://i.imgur.com/a71ZNuc.png 在这个截图中,你可以看到我的两个本地分支被映射到了2个远程分支,即master和origin_master。一切看起来都正常吗?另外,我目前正在origin_master分支上工作,但是HEAD却被映射到了upstram/master分支。在我切换到不同的远程分支时,是否需要移动HEAD到其他分支呢? - Zeeshan Jan
显示剩余4条评论

0

我想建立一个专门跟踪起始项目的另一个分支。

git clone -o upstream user@example.com:upstream.git
cd upstream
git branch -m upmaster
git checkout -b master
git remote add origin user@example.com:myrepo.git
git push -u origin master

现在你可以正常地从主分支推送和拉取到你的代码库。

当你想要拉取上游的更改时,将它们拉到你的专用分支中,并将其合并或变基到你的分支中。

git checkout upmaster
git pull
git checkout master
git rebase upmaster

执行命令 'git branch -u origin' 时出现错误,错误信息为:请求的上游分支 'origin' 不存在。 - Zeeshan Jan
@Zeeshan 是的,对不起直到有人第一次推送后才能运行该命令。我已更新我的答案使用 git push -u origin master - Jeff Puckett
感谢 @Jeff 的帮助。 - Zeeshan Jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接