github项目提交
在 Git 中,origin 和 upstream 是两种常见的远程仓库(remote)名称,它们在使用场景和功能上有明显区别。以下是两者的核心差异及设置方法:
一、origin 与 upstream 的区别
| 类型 | 含义 | 操作权限 | 典型场景 |
|---|---|---|---|
origin |
默认的远程仓库名称,通常指向你 个人克隆的远程仓库(如自己创建的仓库或 fork 的副本) | 可自由推送(push)和拉取(pull)代码,拥有完整操作权限。 |
日常开发中提交代码到自己的远程仓库,或从自己的仓库同步更新。 |
upstream |
指向 原始项目的远程仓库(如开源项目的官方仓库) | 通常仅有拉取(fetch)权限,无法直接推送代码(除非你是项目维护者)。 |
保持本地仓库与原始项目同步更新,或贡献代码时通过 origin 提交 PR 到 upstream。 |
关键区别:
- 用途:
origin是个人开发的主战场,而upstream用于跟踪原始项目更新。 - 权限:
origin可读写,upstream通常只读。 - 生命周期:
upstream需要手动设置,origin在克隆仓库时自动生成。
二、如何设置 origin 和 upstream
1. 查看当前远程仓库配置
git remote -v
输出示例:
origin git@github.com:your-username/your-repo.git (fetch)
origin git@github.com:your-username/your-repo.git (push)
2. 设置 origin
- 克隆仓库时自动生成:
git clone git@github.com:your-username/your-repo.git - 手动修改
origin的 URL(如切换协议或更换仓库地址):git remote set-url origin git@github.com:new-username/new-repo.git
3. 设置 upstream
- 添加
upstream指向原始仓库(常用于 fork 的项目):git remote add upstream git@github.com:original-owner/original-repo.git - 验证是否添加成功:
输出应包含git remote -vupstream的 URL:origin git@github.com:your-username/your-repo.git (push) upstream git@github.com:original-owner/original-repo.git (fetch)
4. 同步 upstream 的更新到本地
git fetch upstream
git checkout main # 切换到本地主分支
git merge upstream/main # 合并上游仓库的最新代码
5. 推送本地修改到 origin
git push origin main
三、高级操作示例
关联本地分支与 upstream 分支
git branch --set-upstream-to=upstream/main main
此命令将本地 main 分支与 upstream/main 分支关联,后续 git pull 可直接拉取上游更新。
删除无效的 upstream 或 origin
git remote remove upstream # 删除 upstream
git remote remove origin # 删除 origin(谨慎操作!)
四、典型工作流示例
-
开发新功能:
- 从
upstream拉取最新代码:git fetch upstream && git merge upstream/main。 - 在本地创建功能分支:
git checkout -b feature/new-feature。 - 提交到
origin:git push origin feature/new-feature。
- 从
-
贡献代码到开源项目:
- 通过
origin提交 Pull Request 到upstream仓库。
- 通过
总结
- 区别:
origin是个人仓库,用于日常开发;upstream是原始仓库,用于同步更新。 - 设置:通过
git remote add和git remote set-url管理远程仓库。 - 最佳实践:定期从
upstream拉取更新,通过origin提交代码,保持仓库同步。

浙公网安备 33010602011771号