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

Lan*_*fee 73 git fork github

我分叉了一个项目,进行了一些更改,并接受了拉取请求.但是现在,我分叉的项目移动到另一个存储库,并且是该存储库的一个分支.

那是:

Original -> MyFork
Run Code Online (Sandbox Code Playgroud)

现在:

NewOriginal -> Original -> MyFork
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到以下内容?

NewOriginal -> MyFork
Run Code Online (Sandbox Code Playgroud)

Cas*_*nge 64

注意:以下解决方案不完整,因为您将丢失所有wiki内容和特定于fork的问题.

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

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

  • 这是github中缺少功能的解决方法. (31认同)
  • 这是问题的正确答案 - OP需要改变github对"父母"的看法,因此当他发出拉取请求时,他们会转到新的父级而不是旧的父级.看起来似乎唯一的答案是再次删除存储库和fork. (7认同)
  • 值得注意的是,如果您在正确的分叉父存储库中打开了 PR。删除、重新分叉和推送不会更新开放 PR 中的分支。这些分支现在已成为孤儿。 (3认同)
  • 如此可惜的github仍然没有更好的工作流程。 (2认同)
  • 可能值得补充的是,有一些脚本可以让你将问题从github存储库迁移到存储库,并且因为github wiki本身只是git reps你也可以迁移它 (2认同)

pok*_*oke 56

在本地,您只需更改原始存储库所在的目标即可.通常该存储库被称为上游,因此您将执行此操作:

git remote set-url upstream git://example.com/NewOriginal.git
Run Code Online (Sandbox Code Playgroud)

根据您使用的主机(即fork所在的位置),可能会有一些额外的内部链接,您无法轻松更改.例如,在Github上,fork直接与您分叉的原始链接相关联.在这种情况下,您需要再次分叉新项目,并使用新的fork.

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

  • 通常,上游存储库的远程控制器称为"origin" (12认同)
  • @knittl:不是,上游存储库是fork所基于的原始存储库.Origin是您克隆的公共存储库,即fork. (6认同)
  • @knittl:从来没有说它默认存在,但*通常*你添加*原创*项目以及一个名为*upstream*的新远程,所以你可以从原始项目中实际更新你的fork ... (5认同)
  • 这对git是正确的,但对于GitHub则不行.[这个答案](http://stackoverflow.com/a/17366793/2063546)是GitHub的正确答案. (4认同)
  • 如果您克隆存储库,那么该存储库的分支将通过`origin`远程可用.`origin` remote的url是从中克隆的url.在git中默认没有`upstream`远程 (2认同)

jkm*_*tin 10

Github 似乎将此称为“重新路由”分叉。这可以作为手动人工操作、作为支持请求来请求。

  • 注意:我不确定这是正确的,因为文档没有说明“重新路由”的确切含义。然而,它与“附加”/“分离”分叉[此处](https://support.github.com/request/fork)分组,所以这*很可能*就是它的意思。 (2认同)

kni*_*ttl 9

更新存储库中的远程URL:

git remote set-url origin <url to NewOriginal, e.g. git://…/bla.git>
Run Code Online (Sandbox Code Playgroud)

  • 那不行.OP仍然需要设置为MyFork的原点,以便一旦他将更改推送到GitHub上的MyFork,他就可以对NewOriginal执行拉取请求.他没有对NewOriginal的写入权限,因此设置原点会导致他的推送失败. (3认同)