协作基础
PR 与 Issues 概览。
协作基础
这一课你将能做到
- 解释 Fork 与 Clone 的本质区别,并画出完整协作链路
- 配置 upstream 远程,同步上游最新代码到自己的 Fork
- 走通「Fork → 改代码 → 发 PR → 被合并」的最小协作流程
为什么要学
开源世界的协作方式很特别:你没有权限直接往别人仓库 push。想给 React、Spring、Vue 修 bug,得先 Fork(复制一份到自己账号),改完发 Pull Request(请求对方拉取你的改动)。这套「Fork + PR」模型是开源世界的通用语言,也是很多公司内部 Git Flow 的变体。
理解这一课,你才真正理解了「分布式协作」——为什么 Git 叫分布式不只是技术架构,更是协作模式的去中心化。
先建立图像
Fork 协作模型的完整链路:
原作者账号 你的账号
┌────────────────┐ ┌────────────────┐
│ upstream │ Fork │ origin (你的) │
│ (官方仓库,你只读)│ ────────────> │ (你的副本,可写) │
└────────────────┘ └────────────────┘
▲ │
│ Pull Request │ push
│ (请求合并) ▼
│ ┌────────────────┐
└─────────────────────────│ 你本地的 clone │
审查通过后被合并 │ (工作区+本地仓库)│
└────────────────┘
三个角色要分清:
- upstream:官方/原始仓库,你只读
- origin:你 Fork 后的副本,你可写
- 本地 clone:从 origin 拉下来的,你实际改代码的地方
跟着做
步骤 1:Fork 一个仓库
在 GitHub 上打开任意开源项目(比如 octocat/Spoon-Knife 这个官方教学仓库),点右上角 Fork 按钮。几秒钟后,你的账号下会多出一份 你的用户名/Spoon-Knife。
步骤 2:Clone 你的 Fork
git clone git@github.com:你的用户名/Spoon-Knife.git
cd Spoon-Knife
git remote -v
# origin git@github.com:你的用户名/Spoon-Knife.git (fetch)
# origin git@github.com:你的用户名/Spoon-Knife.git (push)
注意 clone 下来默认只有 origin(你的 Fork),没有 upstream。
步骤 3:添加 upstream 远程
git remote add upstream git@github.com:octocat/Spoon-Knife.git
git remote -v
# origin git@github.com:你的用户名/Spoon-Knife.git (fetch)
# origin git@github.com:你的用户名/Spoon-Knife.git (push)
# upstream git@github.com:octocat/Spoon-Knife.git (fetch)
# upstream git@github.com:octocat/Spoon-Knife.git (push)
这样你就能随时同步官方仓库的最新代码。
步骤 4:同步上游最新代码
假设官方仓库在你 Fork 后又更新了,你要同步:
git fetch upstream # 下载官方最新
git switch main
git merge upstream/main # 合并进自己的 main
git push origin main # 推回自己的 Fork