关于分叉
A fork 是一个新仓库,它与原始的“上游”仓库共享代码和可见性设置。Fork 通常用于在向上游仓库提交更改之前,对想法或修改进行迭代,例如在开源项目中,或当用户没有上游仓库的写入权限时。更多信息,请参阅 使用 Fork 的工作方式。
向他人的项目提出更改
例如,你可以使用 Fork 来提出与修复错误相关的更改。与其为你发现的错误创建 Issue,你可以
- Fork 该仓库。
- 进行修复。
- 向项目所有者提交 Pull Request。
使用他人的项目作为你自己想法的起点
开源软件基于通过共享代码可以打造更好、更可靠的软件的理念。欲了解更多,请参阅开源倡议组织网站上的 关于开源倡议组织。
有关在 GitHub 上将开源原则应用于组织开发工作的更多信息,请参阅 GitHub 的白皮书《innersource 入门》。
当你从他人的项目 Fork 创建公共仓库时,请务必包含一个许可证文件,以确定你希望项目如何与他人共享。更多信息,请访问 选择开源许可证(choosealicense.com)。
关于开源的更多信息,尤其是如何创建和发展开源项目,我们制作了 开源指南,帮助你通过推荐最佳实践来构建健康的开源社区并维护项目仓库。你还可以免费参加 GitHub Skills 课程,学习如何维护开源社区。
先决条件
如果尚未完成,请先在本地 Git 中设置 Git 与 GitHub.com 的身份验证。更多信息,请参阅 设置 Git。
分叉仓库
你可能会 Fork 项目以向上游仓库提出更改。在这种情况下,定期将你的 Fork 与上游仓库同步是一种良好的实践。为此,你需要在命令行中使用 Git。你可以使用刚刚 Fork 的相同 octocat/Spoon-Knife 仓库来练习设置上游仓库。
-
在 GitHub 上,前往 octocat/Spoon-Knife 仓库。
-
在页面右上角,单击 Fork。

-
在 “Owner” 下,打开下拉菜单并选择 Fork 后仓库的拥有者。
-
默认情况下,Fork 的名称与其上游仓库相同。若想进一步区分你的 Fork,可在 “Repository name” 字段中输入自定义名称。
-
可选地,在 “Description” 字段中输入对你的 Fork 的描述。
-
可选地,选中 仅复制默认分支(DEFAULT)。
在许多 Fork 场景(如为开源项目贡献)中,你只需复制默认分支。如果不选此项,则所有分支都会复制到新 Fork 中。
-
单击 Create fork。
注意
如果想复制上游仓库的其他分支,可在 Branches 页面进行操作。更多信息,请参阅 在仓库内创建和删除分支。
注意
要了解更多关于 GitHub CLI 的信息,请参阅 关于 GitHub CLI。
要 Fork 一个仓库,请使用 gh repo fork 子命令。
gh repo fork REPOSITORY
要在组织中创建 Fork,请使用 --org 标志。
gh repo fork REPOSITORY --org "octo-org"
你可以在 GitHub.com 或 GitHub Desktop 上 Fork 仓库。有关在 GitHub.com 上 Fork 的信息,请参阅 本文的网页版。
在 GitHub Desktop 中,如果您克隆了一个自己没有写入权限的仓库,然后尝试向该仓库推送更改,系统会为您创建一个分叉。
-
在 File 菜单中,点击 Clone Repository。


-
点击对应于您想克隆的仓库所在位置的标签页。本例中,我们点击 URL 标签页。

-
输入要克隆的仓库的 URL 或路径。

-
要选择要克隆到的本地目录,请在 “Local Path” 字段旁点击 Choose... 并导航到目标目录。

-
在 “Clone a Repository” 窗口底部,点击 Clone。
-
要创建分叉,请尝试向该仓库推送更改。例如,创建一个新分支并发布它。系统会弹出提示,询问您是否要分叉此仓库。

-
阅读 “您计划如何使用此分叉?” 窗口中的信息。
- 如果您计划将此分叉用于向原上游仓库贡献,请点击 To contribute to the parent project(为父项目做贡献)。
- 如果您计划将此分叉用于与上游无关的项目,请点击 For my own purposes(用于我自己的目的)。
-
点击 Continue(继续)。
克隆已 Fork 的仓库
目前,你已有 Spoon‑Knife 仓库的 Fork,但本地计算机上尚未拥有该仓库的文件。
-
在 GitHub 上,前往 你的 Fork(即 Spoon‑Knife 仓库)。
-
在文件列表上方,点击 代码。

-
复制该仓库的 URL。
-
要使用 HTTPS 克隆仓库,请在“HTTPS”下点击.
-
要使用 SSH 密钥克隆仓库(包括由您组织的 SSH 证书颁发机构签发的证书),点击 SSH,然后点击.
-
要使用 GitHub CLI 克隆仓库,点击 GitHub CLI,然后点击.

-
-
打开 终端终端Git Bash。
-
将当前工作目录切换到希望放置克隆目录的位置。
-
输入
git clone,随后粘贴之前复制的 URL。它的形式类似于下面这样,只需将其中的YOUR-USERNAME替换为你的 GitHub 用户名。git clone https://github.com/YOUR-USERNAME/Spoon-Knife -
按 Enter 键。将创建本地克隆。
$ git clone https://github.com/YOUR-USERNAME/Spoon-Knife > Cloning into `Spoon-Knife`... > remote: Counting objects: 10, done. > remote: Compressing objects: 100% (8/8), done. > remote: Total 10 (delta 1), reused 10 (delta 1) > Unpacking objects: 100% (10/10), done.
克隆已 Fork 的仓库
目前,你已有 Spoon‑Knife 仓库的 Fork,但本地计算机上尚未拥有该仓库的文件。
注意
要了解更多关于 GitHub CLI 的信息,请参阅 关于 GitHub CLI。
要克隆你的 Fork,使用 --clone 标志。
gh repo fork REPOSITORY --clone=true
配置 Git 将你的 Fork 与上游仓库同步
当你 Fork 项目以向上游仓库提出更改时,可以配置 Git 将上游仓库的更改拉取到本地的 Fork 克隆中。
-
在 GitHub 上,前往 octocat/Spoon-Knife 仓库。
-
在文件列表上方,点击 代码。

-
复制该仓库的 URL。
-
要使用 HTTPS 克隆仓库,请在“HTTPS”下点击.
-
要使用 SSH 密钥克隆仓库(包括由您组织的 SSH 证书颁发机构签发的证书),点击 SSH,然后点击.
-
要使用 GitHub CLI 克隆仓库,点击 GitHub CLI,然后点击.

-
-
打开 终端终端Git Bash。
-
切换目录至你已克隆的 Fork 所在位置。
- 要返回主目录,只需输入
cd,后面不跟其他内容。 - 要列出当前目录下的文件和文件夹,输入
ls。 - 要进入列出的某个目录,输入
cd YOUR-LISTED-DIRECTORY。 - 要返回上一级目录,输入
cd ..。
- 要返回主目录,只需输入
-
输入
git remote -v并按下 Enter。你将看到当前为 Fork 配置的远程仓库。$ git remote -v > origin https://github.com/YOUR-USERNAME/YOUR-FORK.git (fetch) > origin https://github.com/YOUR-USERNAME/YOUR-FORK.git (push) -
输入
git remote add upstream,随后粘贴步骤 3 中复制的 URL 并按下 Enter。它的形式如下:git remote add upstream https://github.com/ORIGINAL-OWNER/Spoon-Knife.git -
要验证刚为 Fork 指定的上游仓库,请再次输入
git remote -v。你应该会看到origin对应你的 Fork URL,upstream对应上游仓库的 URL。$ git remote -v > origin https://github.com/YOUR-USERNAME/YOUR-FORK.git (fetch) > origin https://github.com/YOUR-USERNAME/YOUR-FORK.git (push) > upstream https://github.com/ORIGINAL-OWNER/ORIGINAL-REPOSITORY.git (fetch) > upstream https://github.com/ORIGINAL-OWNER/ORIGINAL-REPOSITORY.git (push)
现在,你可以使用几个 Git 命令保持 Fork 与上游仓库同步。更多信息,请参阅 同步 Fork。
注意
要了解更多关于 GitHub CLI 的信息,请参阅 关于 GitHub CLI。
要为 Fork 的仓库配置远程仓库,请使用 --remote 标志。
gh repo fork REPOSITORY --remote=true
要指定远程仓库的名称,请使用 --remote-name 标志。
gh repo fork REPOSITORY --remote-name "main-remote-repo"
编辑 Fork
你可以对 Fork 进行任意更改,包括
- 创建分支: 分支 让你在不危及主项目的情况下构建新功能或尝试想法。
- 打开 Pull Request: 如果你想将更改贡献回上游仓库,可通过提交 Pull Request,向原作者请求将你的 Fork 合并到他们的仓库。
查找其他仓库进行 Fork
Fork 一个仓库以开始为项目贡献代码。你可以 Fork 任何公开仓库。
- 到您的个人账户
- 到您有权限创建仓库的组织
如果您有私有仓库的访问权限且所有者允许分叉,您可以分叉该仓库
- 到您的个人账户
- 到您在 GitHub Team 中有创建仓库权限的组织
使用 GitHub Free 时,无法将私有仓库 Fork 到组织中。有关 GitHub Team 和 GitHub Free 的更多信息,请参阅 GitHub 计划。有关何时可以 Fork 仓库的更多信息,请参阅 关于 Fork 的权限和可见性。
你可以浏览 Explore GitHub,寻找项目并开始为开源仓库贡献代码。更多信息,请参阅 在 GitHub 上寻找开源贡献途径。
后续步骤
你已经 Fork 了一个仓库,练习了克隆 Fork,并配置了上游仓库。
-
有关从电脑克隆 Fork 并同步 Fork 中更改的更多信息,请参阅 设置 Git。
-
你还可以创建一个新仓库,将所有项目放入其中并在 GitHub 上共享代码。为你的项目创建仓库可让你在 GitHub 上存储代码,为你的工作提供备份,并可选择与其他开发者共享。更多信息,请参阅 仓库快速入门。
-
GitHub 上的每个仓库都归个人或组织所有。你可以通过在 GitHub 上关注并关联这些人、仓库和组织来进行互动。更多信息,请参阅 在 GitHub 上寻找灵感。
-
GitHub 拥有活跃的支持社区,你可以在这里寻求帮助并与来自全球的人交流。加入 GitHub Community 的讨论吧。