我有一个项目托管在GitHub有人已经分叉。在他们的fork上,他们创建了一个新的分支“foo”并做了一些更改。我如何拉他们的“foo”到一个新的分支也命名为“foo”在我的回购?
我知道他们可以向我提交撤诉请求,但我想自己启动这个程序。
假设:
因为他们分叉了我的项目,所以我们的回购都有相同的“历史”
虽然GitHub显示他们的项目是从我的分叉,我的本地存储库没有任何引用到这个人的项目。我需要添加他们的遥控器吗?
我还没有一个叫“foo”的分支-我不知道我是否需要手动创建这个。
我绝对想把它拉到一个单独的分支,而不是我的主人。
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo
这将设置一个本地分支foo,跟踪远程分支同事/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
公认的答案是可行的,但您不需要将它们添加为遥控器,因为每次这样做都很麻烦,而且很痛苦。
获取它们的提交:
git fetch git://path/to/coworkers/repo.git theirbranch:ournameforbranch
这将创建一个名为ournameforbranch的本地分支,与他们的分支完全相同。对于问题示例,最后一个参数是foo:foo。
git: / /道路/ /同事/回购。git部分应该替换为他们GitHub存储库页面上的URL。一个SSH URL看起来像git@github.com:他们的用户名/reponame.git和一个HTTPS URL像https://github.com/theirusername/reponame.git。
注意:如果想一个与你自己的分支不冲突的名字很麻烦,我们的nameforbranch部分可以进一步省略。在这种情况下,可以使用一个名为FETCH_HEAD的引用。你可以用getlog FETCH_HEAD来查看它们的提交,然后用cherry- picking来挑选它们的提交。
把它推给他们:
通常情况下,你想要修复他们的某些东西,然后把它推回去。这也是可能的:
git fetch git://path/to/coworkers/repo.git theirbranch
git checkout FETCH_HEAD
# fix fix fix
git push git://path/to/coworkers/repo.git HEAD:theirbranch
如果你担心在分离状态下工作,可以使用:ournameforbranch创建一个分支,并用我们的nameforbranch替换上面的FETCH_HEAD和HEAD。
如果fork repo是受保护的,所以你不能直接推入它,并且你的目标是对它们的foo进行更改,那么你需要像这样将它们的分支foo放入你的repo:
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推到你自己的远程repo。
git push --set-upstream origin foo
现在foo在你的GitHub回购和你的本地foo正在跟踪它。如果他们继续对foo进行更改,你可以获取他们的并合并到你的foo中。
git checkout foo
git fetch protected_repo
git merge protected_repo/foo