如何从拉别人的回购远程分支

问题描述 投票:222回答:6

我有托管在GitHub上一个项目,该项目已经有人分叉。在他们的岔路口,他们已经创造了一个新的分支“foo”和做了一些改动。我怎么拉自己的“富”到一个新的分支也被命名为“foo”在我的回购?

我知道他们可以提交一个pull请求给我,但我想启动这个过程中我自己。

假设如下:

  1. 因为他们分叉我的项目,无论是我们的回购共享相同的“历史”
  2. 虽然GitHub上展示他们的项目是从矿山分叉,我的本地库没有这个人的项目中的任何引用。我是否需要添加他们作为远程?
  3. 我没有一个名为“foo”的分支,但 - 我不知道我是否需要先手动创建此。
  4. 我一定要这个被拉进一个单独的分支,而不是我的主人。
git github git-branch git-pull git-remote
6个回答
307
投票
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo

这将建立一个本地分支qazxsw POI,跟踪远程分支qazxsw POI。不要当你的同事已经做了一些改动,就可以轻松地将它们:

foo

回应评论:

酷:)如果我想使自己的更改分支,我要创建“富”第二个地方分支“酒吧”和我的“福”在那里工作,而不是直接?

你并不需要创建一个新的分支,即使我推荐它。你还不如直接承诺coworker/foo和你的同事拉你的分支。但该分支已经存在,你的分支git checkout foo git pull 需要设置为上游分支吧:

foo

假设foo是你的资料库(远程到你的同事库)在类似的方式定义:

git branch --set-upstream foo colin/foo

85
投票

不,你并不需要将其添加为远程。这将是clumbersome和痛苦,每次做。

Grabbing their commits:

colin

这将创建一个本地分支命名git remote add colin git://path/to/colins/repo.git 这是完全一样的东西git fetch [email protected]:theirusername/reponame.git theirbranch:ournameforbranch 是他们。对于问题例如,最后一个参数是ournameforbranch

theirbranch组成部分又可以离开,如果想起来,不与自己的分支之一冲突的名字是麻烦。在这种情况下,参考称为foo:foo可用。您可以:ournameforbranch看到自己提交,然后做这样的事情FETCH_HEAD樱桃挑选自己的提交。

Pushing it back to them:

通常情况下,你要修复他们的东西,并将它推右后卫。这也是有可能的:

git log FETCH_HEAD

如果cherry-picked工作困扰您的问题,通过各种手段使用git fetch [email protected]:theirusername/reponame.git theirbranch git checkout FETCH_HEAD # fix fix fix git push [email protected]:theirusername/reponame.git HEAD:theirbranch 创建一个分支和替换以上detached state :ournameforbranchFETCH_HEAD


8
投票

如果ANTAK的回答:

HEAD

给你:

ournameforbranch

然后(以下Przemek D的建议)使用

git fetch [email protected]:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH> 

2
投票

如果分叉回购是受保护的,所以你不能直接推到它,你的目标是要更改其富,那么你需要得到他们的分支富到您的回购像这样:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

现在你有富的本地副本没有关联到它的上游。您可以更改提交到它(或没有),然后把你的富到自己的远程回购。

git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>

现在,foo是在GitHub的回购和当地富正在跟踪它。如果他们继续进行更改为foo你可以获取他们并合并到富。

git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo 
git checkout --no-track protected_repo/foo

1
投票

下面是一个很好的有利的解决方案,与GitHub的工作检查出其他用户的叉公关分支。你需要知道拉入请求ID(其中GitHub上与PR标题显示沿)。

例:

修复你的不安全的代码#8 Alice想要合并1到提交从git push --set-upstream origin foo git checkout foo git fetch protected_repo git merge protected_repo/foo

your_repo:master

用您的远程如果从her_repo:branch不同。 替代git checkout -b <branch> git pull origin pull/8/head 用正确的拉请求ID。


0
投票

GitHub上有新相对于前一个答案的选择,只是复制/粘贴来自PR的命令行:

  1. 滚动到PR的底部看到origin8按钮
  2. 点击右边的链接:Merge
  3. 按下此图标步骤1的权
  4. 在终端粘贴命令
© www.soinside.com 2019 - 2024. All rights reserved.