261

如何让 GitHub 忘记或解除我的 repo 最初是另一个项目的分支的关联?

我在 GitHub 上创建了一个项目。我现在可以看到“从任何/任何东西分叉”。不再维护父存储库“whatever/whatever”。我被允许继续使用原始存储库的代码库来创建一个独立的存储库。

有没有办法将我的项目与原始存储库分离?

4

7 回答 7

226

您可以联系 github 支持并要求他们将您的存储库切换到“正常模式”。

此页面上,“Commit was made in a fork”段落中,解释了必须通过支持才能切换。因此,您自己可能无法做到这一点(除非您销毁并重新创建之前解释过的存储库......如果您这样做,如果您的项目附有票证或维基,请小心被删除!)。

2022 年 1 月更新:

使用https://support.github.com/request/fork上的 GitHub 聊天机器人虚拟助手。

于 2013-04-17T06:13:13.833 回答
76

您可以从 GitHub UI 将分叉的存储库复制到一个新的存储库(没有分叉依赖项),然后删除原始的分叉存储库:

  • 登录 GitHub
  • 选择右上角的+号,然后选择Import repository
  • 导入您的分叉存储库。新的存储库将没有 fork 依赖项。
  • 在存储库设置中删除原始的分叉存储库。

注意:这种方法不会保留问题和拉取请求。

于 2017-12-26T05:32:01.070 回答
45

确保您在本地存储库中拥有所有重要的分支和标签,删除 github 存储库,通过常规方式(不分叉)重新创建存储库,并使用git push --all. 请注意,如果您有不想发布的本地分支,则可能值得为该操作创建一个临时的干净本地克隆。

但是,这也将摆脱 wiki 和问题。由于 wiki 实际上是它自己的存储库,因此可以通过克隆它然后重新创建和推送来类似地处理它。仓库地址位于 wiki 的 Git 访问页面 ( git@github.com:user/repo.wiki.git)。

这留下了问题。它们可以通过API导出,但据我所知,您只能与您的人创建问题和评论,因此无法完美地导入它们。

因此,如果您需要保留问题,您应该按照 Thomas Moulard 的建议通过 github 支持。

于 2013-04-17T06:07:04.473 回答
23

我遇到了类似的问题,最后使用这个github 帮助页面来解决它。我不介意 wiki 和问题跟踪器,因为它是为我的博客使用由另一个用户友好开发的主题。

要在多次提交后分离一个分叉的 repo 并将其用作您自己的 repo,而不会丢失整个历史记录:

git clone --bare git@github.com:user/forked_repo.git

new-repository在 github 网站上创建一个新的空存储库。并推送一个镜像版本:

cd user.github.com.git/

git push --mirror git@github.com:user/new-repository.git

可以在 github 上重命名,forked_repository用另一个名称保留它作为备份并在需要时检查更新。或者干脆删除它。

将 重命名new-repository为原始名称就可以了。作为副作用,您的提交现在出现在您的历史记录中。

于 2015-01-26T09:03:55.057 回答
15

这仅适用于 GitHub Enterprise,不适用于 github.com

登录到具有管理员权限的帐户:

  1. 转到您需要分离的存储库:https://<ghe url>/<org>/<repo>
  2. 点击右上角的“站点管理员”火箭
  3. 点击顶部菜单栏上的“协作”
  4. 单击左侧窗格中的“网络”
  5. 在 Network Structure 窗格中单击“Make Root”
  6. 接受

这是在 GitHub Enterprise 2.9 上测试的

于 2017-10-23T22:10:53.060 回答
12

使用来自aurelienClayton的信息,我可以通过以下方式做到这一点:

$ git clone --bare https://github.com/my/forked_repo.git
<delete forked_repo on GitHub>
<recreate repo on GitHub using same name>
$ cd forked_repo.git
$ git push --mirror

这是文档git clone --bare

创建一个裸 Git 存储库。也就是说,不是在 中创建<directory>和放置管理文件,而是将<directory>/.git<directory>本身设为$GIT_DIR. 这显然意味着 -n 因为没有地方可以检查工作树。远程的分支头也直接复制到相应的本地分支头,而不将它们映射到refs/remotes/origin/. 使用此选项时,既不会创建远程跟踪分支,也不会创建相关的配置变量。

这是文档git push --mirror

不是命名要推送的每个 ref,而是指定refs/(包括但不限于refs/heads/refs/remotes/refs/tags/)下的所有 ref 都镜像到远程存储库。新创建的本地 refs 会被推送到远端,本地更新的 refs 会在远端强制更新,删除的 refs 会从远端移除。如果设置了配置选项,这是默认remote.<remote>.mirror设置。

注意:与其他git基于答案一样,这不会复制不属于gitrepo 的问题,例如 wiki 和问题。每塔皮奥:

  • wiki 是一个单独的 git 存储库,可以按 Tapio 以类似的方式处理。地址是:git@github.com:user/repo.wiki.git
  • 问题可以通过 GitHub API 导出,但重新创建它们会出现问题,因为它们只能由您的用户创建,因此导入会丢失信息。
于 2016-08-05T08:55:51.533 回答
4

使用您的凭据登录 GitHub。

转到https://support.github.com/contact?tags=rr-forks&subject=Detach%20Fork&flow=detach_fork

输入 fork 的 URL 或 repo 名称为your-user-name/repository-name,并回答虚拟助手的其他问题。

您将收到一封带有票号的电子邮件,您可以在其中查看您的请求状态。一旦你的回购被分叉,你也会通过电子邮件收到通知。


注意:我可以在 Chrome 和 Edge 中使用虚拟助手,但不能在 Firefox 中使用。此外,在分离回购后,我的票的状态仍处于待处理状态。我猜 GitHub 最终会在他们的过程中修复这些故障。

于 2021-11-05T05:29:04.963 回答