git fork 不是一个 Git 命令。

你不会在本地通过 git fork 来执行任何操作。fork 是一个发生在代码托管平台(如 GitHub, GitLab, Bitbucket)上的概念,而不是一个 Git 自身的命令。
什么是 Fork?
你可以把 Fork 理解为 “复制” 或 “派生” 一个仓库,当你点击一个仓库的 "Fork" 按钮时,代码托管平台会为你创建一个该仓库的完整副本。
这个副本具有以下特点:
- 独立存在:它存在于你自己的账户下,与原始仓库完全分离。
- 起始点相同:Fork 出来的仓库在创建的那一刻,其内容与原始仓库完全一致。
- 拥有独立的管理权:你可以对这个副本进行任何操作,比如提交代码、创建分支、拉取请求等,而不会影响原始仓库。
为什么需要 Fork?
Fork 是开源社区协作工作流的核心,它的主要目的有两个:

a. 贡献代码给他人
这是最常见的用法,当你想为一个你并不拥有维护权的开源项目(比如一个流行的库、框架)贡献代码时,你不能直接在原始仓库上创建分支,正确的流程是:
- Fork:将原始仓库复制到你自己的名下。
- Clone:把你自己的这个副本(Fork 仓库)克隆到本地电脑上。
- 修改 & 提交:在本地进行代码修改、测试,然后提交到你自己的仓库。
- Pull Request (PR):在你的仓库和原始仓库之间创建一个“拉取请求”,请求项目维护者将你的代码合并到他们的项目中。
b. 基于他人项目进行二次开发
如果你想基于一个优秀的开源项目,创建一个带有你自己功能的分支版本(一个 "衍生项目"),Fork 是最理想的方式。
- Fork:将项目复制到你自己的账户下。
- Clone & 开发:克隆到本地,按照你的想法进行开发和修改。
- 独立维护:你的衍生项目将独立于原始项目发展,你可以自由地发布版本,而无需获得原始项目维护者的许可。
Fork 的工作流程(以 GitHub 为例)
下面是一个典型的使用 Fork 向开源项目贡献代码的完整流程:
步骤 1:在 GitHub 上 Fork 仓库
- 打开你想要贡献的开源项目页面(
https://github.com原作者/原项目名)。 - 点击页面右上角的 "Fork" 按钮。
- 等待几秒钟,你将会被重定向到你自己的 GitHub 页面,现在你拥有了一个
https://github.com你的用户名/原项目名的仓库。
步骤 2:将 Fork 仓库克隆到本地
你需要把你自己的这个仓库(而不是原始仓库)克隆到你的电脑上。

# 克隆你自己的 Fork 仓库到本地 git clone https://github.com你的用户名/原项目名.git # 进入项目目录 cd 原项目名
步骤 3:添加上游仓库
为了能获取到原始仓库的最新更新(这非常重要!),你需要为你的本地仓库添加一个名为 upstream 的远程仓库,它指向原始仓库。
# 添加原始仓库为 "upstream" 远程仓库 git remote add upstream https://github.com原作者/原项目名.git
你可以用 git remote -v 查看你当前配置的所有远程仓库,现在应该能看到 origin(你自己的 Fork 仓库)和 upstream(原始仓库)。
步骤 4:保持你的 Fork 仓库与上游同步(可选但推荐)
在开始修改之前,最好先确保你的 Fork 仓库是最新的。
# 从上游仓库获取最新的分支和提交 git fetch upstream # 切换到你的主分支(通常是 main 或 master) git checkout main # 将上游仓库的 main 分支合并到你的本地 main 分支 git merge upstream/main
现在你的本地 main 分支已经和原始仓库保持同步了。
步骤 5:创建并切换到新的分支
永远不要在主分支上直接修改代码!
# 创建一个描述新功能的分支,并立即切换过去 git checkout -b feature/my-awesome-feature
步骤 6:修改代码并提交
你可以在这个新分支上进行你的开发工作了。
# 进行代码修改... # 添加修改的文件到暂存区 git add . # 提交更改 git commit -m "feat: 添加了一个超级棒的新功能"
步骤 7:将你的分支推送到你的 Fork 仓库(origin)
git push origin feature/my-awesome-feature
步骤 8:创建 Pull Request (PR)
- 回到你的 GitHub 页面,进入你的 Fork 仓库。
- GitHub 会提示你有一个刚刚推送的分支,并有一个绿色的 "Compare & pull request" 按钮,点击它。
- 在 PR 页面,确保:
- base repository(目标仓库)是原始仓库 (
原作者/原项目名)。 - base(目标分支)是
main或master。 - head repository(源仓库)是你自己的仓库 (
你的用户名/原项目名)。 - compare(源分支)是你刚刚推送的分支 (
feature/my-awesome-feature)。
- base repository(目标仓库)是原始仓库 (
- 填写 PR 的标题和描述,清晰地说明你的修改内容和原因。
- 点击 "Create pull request"。
你就完成了一次贡献!项目维护者会审查你的代码,并提供反馈,然后决定是否合并你的 PR。
git fork vs. git clone
| 特性 | git fork (平台操作) |
git clone (Git 命令) |
|---|---|---|
| 本质 | 平台操作,在网页上点击按钮 | 本地命令,在终端执行 |
| 结果 | 在你的账户下创建一个远程仓库副本 | 在你的电脑上创建一个本地仓库副本 |
| 关系 | 创建一个与原始仓库平行的、独立的新仓库 | 创建一个指向特定远程仓库的本地工作副本 |
| 目的 | 获取对他人项目的写权限(通过自己的副本) | 获取一个项目到本地进行开发或查看 |
先 Fork,再 Clone,Fork 是获取远程的“写”权限,Clone 是把这个有“写”权限的仓库拉到本地。
git fork不是一个 Git 命令,它是代码托管平台(如 GitHub)上的一个功能。- Fork = 复制仓库,它会为你创建一个原始仓库的完整副本,并归你所有。
- 主要用途:安全地贡献代码给他人项目,或基于他人项目进行二次开发。
- 核心流程:Fork (复制) -> Clone (拉到本地) -> 修改 -> Push (推到自己的远程) -> Pull Request (请求合并)。
- 最佳实践:记得为你的本地仓库添加
upstream远程链接,以便随时同步原始项目的最新进展。
