GitHub Fork 协作完整流程
GitHub Fork 协作完整流程
适用于:开源项目二次开发、插件扩展、给上游项目提交 PR(Pull Request)
一、Fork 是什么?
Fork 是把别人的 GitHub 仓库复制一份到你自己的账号下:
原仓库(upstream) → 你的仓库(origin)
你在自己的仓库里可以随意修改代码,而不会影响原项目。
二、整体协作流程
flowchart TD
A[原项目 GitHub 仓库] -->|Fork| B[你自己的 GitHub 仓库]
B -->|git clone| C[你的本地仓库]
A -->|git fetch upstream| C
C -->|git merge upstream/main| C
C -->|git push origin| B
B -->|Pull Request| A
三、Fork 项目(网页操作)
-
打开你要 Fork 的仓库,例如:
https://github.com/vercel/next.js -
点击右上角 Fork
-
选择你的 GitHub 账号
-
得到你的仓库:
https://github.com/你的用户名/next.js
四、Clone 到本地
git clone https://github.com/你的用户名/next.js.git
cd next.js
五、配置 upstream(非常重要)
查看当前远程仓库:
git remote -v
你会看到:
origin https://github.com/你的用户名/next.js.git
添加原仓库:
git remote add upstream https://github.com/vercel/next.js.git
再确认:
git remote -v
应该是:
origin 你自己的仓库
upstream 原项目仓库
六、同步原项目最新代码(标准流程)
git checkout main
git fetch upstream
git merge upstream/main
git push origin main
含义:
用原作者的 main 更新你的 main,并推送到你自己的 GitHub
七、开发你的功能
git checkout -b my-feature
# 修改代码
git add .
git commit -m "Add my feature"
git push origin my-feature
八、提交 Pull Request
-
打开你的 GitHub 仓库
-
GitHub 会提示:
Compare & Pull Request -
点击并填写说明
-
提交 → 原项目维护者审核
九、为什么必须使用 upstream?
| 远程名 | 作用 |
|---|---|
| origin | 你自己的 GitHub 仓库 |
| upstream | 原作者的 GitHub 仓库 |
你只向 origin push,但要从 upstream 获取最新版本。
十、fetch vs merge 的正确用法
sequenceDiagram
participant U as GitHub upstream
participant L as Local Repo
participant O as GitHub origin
U->>L: git fetch upstream
L->>L: upstream/main 更新
L->>L: git merge upstream/main
L->>O: git push origin main
-
fetch= 下载真实世界 -
merge= 使用真实世界
永远不要跳过 fetch。
十一、错误示例(不要这样)
git merge upstream/main # ❌ 如果你没先 fetch
你合并的可能是 几个月前缓存的 upstream,非常危险。
十二、最佳实践总结
Fork 项目的生存法则
只向 origin 写代码
只从 upstream 读更新
fetch 在前,merge 在后