我有一个在GitHub上托管的项目,有人分叉了。在他们的分支上,他们创建了一个新的分支“foo”并进行了一些更改。如何将他们的“foo”拉入我的仓库中名为“foo”的新分支?
我知道他们可以向我提交拉取请求,但我想自己启动此过程。
假设如下:
答案 0 :(得分:289)
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
对评论的回应:
酷:)如果我想自己做 我应该改变那个分支 创建第二个本地分支“bar” 来自“foo”并在那里工作而不是 直接在我的“foo”上?
即使我推荐它,您也不需要创建新的分支。你也可以直接提交foo
并让你的同事拉你的分支。但该分支已经存在,您的分支foo
需要设置为它的上游分支:
git branch --set-upstream foo colin/foo
假设colin
是您的存储库(您的同事存储库的远程),以类似的方式定义:
git remote add colin git://path/to/colins/repo.git
答案 1 :(得分:74)
不,你不需要将它们添加为遥控器。这样做很麻烦,每次都很痛苦。
git fetch git@github.com:theirusername/reponame.git theirbranch:ournameforbranch
这会创建一个名为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
如果在detached state工作,请务必使用:ournameforbranch
创建分支,并将上面的FETCH_HEAD
和HEAD
替换为ournameforbranch
。
答案 2 :(得分:5)
如果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&#39;的建议)使用
git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>
答案 3 :(得分:2)
如果分叉存储库受保护,因此您不能直接将其推送到存储库中,而您的目标是更改其foo,则需要像这样将其分支foo放入存储库中:
git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo
git checkout --no-track protected_repo/foo
现在,您有了foo的本地副本,而没有上游关联。您可以提交更改(或不提交更改),然后将foo推送到自己的远程仓库中。
git push --set-upstream origin foo
现在foo在您的GitHub存储库中,您的本地foo正在对其进行跟踪。如果他们继续对foo进行更改,则可以获取他们的内容并合并到foo中。
git checkout foo
git fetch protected_repo
git merge protected_repo/foo
答案 4 :(得分:0)
以下是一个不错的权宜解决方案,可与GitHub一起使用,以从另一个用户的分支中检出PR分支。您需要知道拉取请求ID(GitHub与PR标题一起显示)。
示例:
修复您的不安全代码#8
alice 希望将1个提交从your_repo:master
合并到her_repo:branch
git checkout -b <branch>
git pull origin pull/8/head
如果与origin
不同,请替换您的遥控器。
用正确的拉取请求ID替换8
。
答案 5 :(得分:0)
相对于前面的答案,GitHub有一个新选项,只需从PR复制/粘贴命令行即可:
Merge
或Squash and merge
按钮view command line instructions