2011-04-21 22 views
66

我分出了一个项目,做了一些修改,并且接受了一个拉取请求。但是现在,我分叉的项目移动到另一个存储库,并且是该存储库的一个分支。如何更改我从哪个GitHub项目中分出?

即:

Original -> MyFork 

现在:

NewOriginal -> Original -> MyFork 

我将如何得到它的下面?

NewOriginal -> MyFork 
+29

接受的答案提供了一个解决办法,但并没有真正回答的主要问题,如何更改元数据在GitHub上本身“从分叉”。我对同样的事情感兴趣。 – 2012-12-25 22:57:09

回答

49

本地你可以改变原来的存储库的目标是位于。通常认为库称为上游,所以你可以这样做:

git remote set-url upstream git://example.com/NewOriginal.git 

根据您所使用的主机(即,你的叉子所在地),可能有一些额外的内部链接,你可以不容易改变。例如,在Github上,分支直接与您从中分出的原始链接相关联。在这种情况下,您需要再次分叉新项目,并使用新分叉。

在这种情况下,但是你可以很容易地改变起源库的URL,以及,只是把你在你的旧叉之前改变了一切到您的新的分支。

+10

通常上游存储库的远程被称为'origin' – knittl 2011-04-21 20:16:09

+3

@knittl:不是真的,上游存储库是fork基于的原始存储库。 Origin是您从公共存储库克隆而来的,即叉子。 – poke 2011-04-21 20:17:57

+2

如果你克隆了一个版本库,那么这个版本库的分支将通过'origin'远程获得。 “origin”遥控器的网址是从中克隆的网址。 git – knittl 2011-04-21 20:20:56

9

更新在你的仓库远程URL

git remote set-url origin <url to NewOriginal, e.g. git://…/bla.git> 
+2

这是行不通的。 OP仍然需要将来源设置为MyFork,以便在他将更改推送到GitHub上的MyFork后,他可以对NewOriginal执行拉取请求。他没有对NewOriginal的写入权限,因此将起源设置为会导致推送失败。 – Guy 2014-09-24 17:50:17

56

注意:以下解决方案不完整,因为您将失去所有维基内容和问题特定于您的分叉。

您可以通过以下步骤实现:

  1. 从现有的叉子拉下所有分支和标签。
  2. 在GitHub上删除您的存储库。
  3. 从新存储库分叉。
  4. 如有必要,更新远程URL
  5. 将所有本地分支和标签推送到新的存储库。
+6

这是问题的正确答案 - OP需要更改github对“父”的视图,因此当他发出pull请求时,他们会转到新父项,而不是旧项。看起来似乎唯一的答案是删除存储库并再次分叉。 – Ether 2013-08-25 17:38:13

+21

这是在github中缺少的功能的解决方法。 – abergmeier 2014-01-15 10:25:02

+1

这样的羞耻github仍然没有一个更好的工作流程。 – Ashimema 2015-09-08 21:26:58

2

假设您执行了正确的分叉并添加上游参见githubHelpOnFork;只需更改上游URL,这样做:

  1. 验证当前的上游和原始的样子:

    git remote -v 
    
  2. 如果你看到上游列出你只想改变它的URL,做什么@戳建议(如果不遵循helpGithub以上链接添加新的上游):

    git remote set-url upstream git://example.com/NewOriginal.git 
    
  3. 然后验证上游指向新的URL

    远程Git -v

相关问题