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

我有一个项目托pipe在GitHub上,有人分叉。 在他们的fork上,他们创build了一个新的分支“foo”,并做了一些修改。 我如何将他们的“foo”拖入我的回购中也被命名为“foo”的新分支?

我知道他们可以向我提交一个请求,但我想自己发起这个过程。

假设如下:

  1. 因为他们分出了我的项目,我们的这两个回购项目都有相同的“历史”
  2. 虽然GitHub显示他们的项目是从我的分支,我的本地存储库没有任何引用这个人的项目。 我是否需要将它们添加为远程?
  3. 我还没有一个名为“富”的分支 – 不知道如果我需要手动创build这个第一或什么。
  4. 我绝对想把这个拉进一个单独的分支,而不是我的主人。

我希望这是有道理的。

git remote add coworker git://path/to/coworkers/repo.git git fetch coworker git checkout --track coworker/foo 

这将设置一个本地分支foo ,跟踪远程分支coworker/foo 。 所以当你的同事做出一些改变的时候,你可以很容易地把他们拉出来:

 git checkout foo git pull 

对评论的回应:

酷:)如果我想对自己的分支做出自己的修改,是否应该从“foo”创build第二个本地分支“bar”并在那里工作而不是直接在我的“foo”上?

即使我推荐它,你也不需要创build一个新的分支。 你也可以直接承诺,让你的同事拉你的分支。 但是那个分支已经存在了,你的分支foo需要被设置为上游分支:

 git branch --set-upstream foo colin/foo 

假设colin是以类似的方式定义的存储库(远离您的同事存储库):

 git remote add colin git://path/to/colins/repo.git 

不,您不需要将它们添加为远程。 这将是每一次都很麻烦和痛苦。

抓住他们的承诺:

 git fetch git@github.com:theirusername/reponame.git theirbranch:ournameforbranch 

这创build了一个名为ournameforbranch的本地分支,与theirbranch对他们来说是完全一样的。 对于这个问题的例子,最后一个参数是foo:foo

注意:ournameforbranch一个与你自己的分支不冲突的名字是烦人的,那么我们的分支部分可以进一步被忽略。 在这种情况下,可以使用名为FETCH_HEAD的引用。 你可以git log FETCH_HEAD来看看他们的提交,然后做cherry-picked樱桃挑选他们的提交。

推回给他们:

通常情况下,你想解决他们的问题,并把它推回去。 这也是可能的:

 git fetch git@github.com:theirusername/reponame.git theirbranch git checkout FETCH_HEAD # fix fix fix git push git@github.com:theirusername/reponame.git HEAD:theirbranch 

如果在分离状态下工作,您一定要使用:ournameforbranch创build一个分支,并用FETCH_HEAD的分支replace上面的FETCH_HEADHEAD

如果antak的答案是:

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

给你:

 Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 

然后(遵循Przemek D的build议)使用

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