如何从别人的回购拉远程分支
我有一个项目托pipe在GitHub上,有人分叉。 在他们的fork上,他们创build了一个新的分支“foo”,并做了一些修改。 我如何将他们的“foo”拖入我的回购中也被命名为“foo”的新分支?
我知道他们可以向我提交一个请求,但我想自己发起这个过程。
假设如下:
- 因为他们分出了我的项目,我们的这两个回购项目都有相同的“历史”
- 虽然GitHub显示他们的项目是从我的分支,我的本地存储库没有任何引用这个人的项目。 我是否需要将它们添加为远程?
- 我还没有一个名为“富”的分支 – 不知道如果我需要手动创build这个第一或什么。
- 我绝对想把这个拉进一个单独的分支,而不是我的主人。
我希望这是有道理的。
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_HEAD
和HEAD
。
如果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>