如何更改我从哪个分叉的GitHub项目?


77

我创建了一个项目,进行了一些更改,并接受了请求请求。但是现在,我分叉的项目移至另一个存储库,并且是该存储库的分支。

那是:

Original -> MyFork

现在:

NewOriginal -> Original -> MyFork

我将如何理解以下内容?

NewOriginal -> MyFork

40
接受的答案提供了一种解决方法,但并没有真正回答主要问题,即如何更改GitHub本身上的“派生自”元数据。我对同一件事感兴趣。
马修·弗拉申

Answers:


58

在本地,您只需更改原始存储库的目标即可。通常,该存储库称为上游,因此您可以这样做:

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

根据所使用的主机(即分叉所在的位置),可能会有一些其他内部链接,因此更改起来不那么容易。例如,在Github上,前叉直接链接到您从中分叉的原件。在这种情况下,您需要再次分叉新项目,然后使用新分叉。

在这种情况下,但是你可以很容易地改变URL中的原产地库,以及,只是把一切都在你的老叉之前变成你的新的分支。


12
通常,上游存储库的远程origin
站点

7
@knittl:并非如此,上游存储库是fork所基于的原始存储库。Origin是从中克隆的公共存储库,即fork。

2
‽如果克隆存储库,则该存储库的分支将可通过origin远程访问。所述的URLorigin远程是将其从克隆的URL。upstream默认情况下,git中没有遥控器
knittl 2011年

5
@knittl:不要说这是有默认,但通常在添加项目,以及一个新的远程称为上游,这样你就可以从原来的项目实际上更新叉...

5
这对于git是正确的,但对于GitHub则不正确。 这个答案对于GitHub是正确的。
2014年

69

注意:以下解决方案是不完整的,因为您将丢失所有Wiki内容以及与分叉有关的问题。

您可以使用以下步骤实现此目的:

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

8
这是对所提问题的正确答案-OP需要更改github对“父级”的看法,因此当他发出拉取请求时,它们将转到新的父级而不是旧的父级。似乎唯一的答案是删除存储库,然后再次进行分叉。
以太

34
这是github中缺少功能的解决方法。
abergmeier 2014年

2
如此可惜的github仍然没有更好的工作流程。
Ashimema

2
可能值得补充的是,这里有脚本允许您将问题从github存储库迁移到存储库,并且由于github Wiki本身只是git reps,您也可以迁移该文件
Ashimema 2015年

谢谢!但是您可以显示git命令以了解如何实际执行这些步骤吗?理想情况下还包括分叉和还原github Wiki?还有@Ashimema,您可以链接到用于迁移问题的良好脚本吗?
nealmcb

9

更新存储库中的远程URL

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

3
那行不通。OP仍需要将原点设置为MyFork,以便一旦他在GitHub上将更改推送到MyFork上,他就可以对NewOriginal发出拉取请求。他没有对NewOriginal的写入权限,因此将原点设置为该地址将导致其推送失败。
盖伊2014年

2

假设您执行了适当的派生并向上游添加,请参见githubHelpOnFork;要仅更改上游URL,请执行以下操作:

  1. 验证您当前的上游和起源是什么样的:

    git remote -v
    
  2. 如果您看到上游列出了并且您只想更改其URL,请执行@poke建议的操作(如果不遵循上面的helpGithub链接来添加新的上游):

    git remote set-url upstream git://example.com/NewOriginal.git
    
  3. 然后验证上游是否指向新网址

    git remote -v

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.