在 Git 中,你可以设置一个额外的远程仓库(通常称为 upstream
),用于跟踪原始项目(如开源项目)的更新。这在 Fork 工作流 中非常常见,例如:
- 你 Fork 了某个仓库(
origin
指向你的 Fork)。 - 你需要同步原始仓库(
upstream
指向原始项目)。
1. 添加 upstream
远程仓库
(1) 查看当前远程仓库
git remote -v
默认只有 origin
(你的 Fork):
scss
origin git@github.com:your-username/repo.git (fetch)
origin git@github.com:your-username/repo.git (push)
(2) 添加 upstream
(原始仓库)
csharp
git remote add upstream https://github.com/original-owner/repo.git
upstream
是自定义名称(常用,但你可以换成其他名字)。- 如果是 SSH 方式(推荐):
scss
git remote add upstream git@github.com:original-owner/repo.git
(3) 验证是否添加成功
git remote -v
输出:
perl
origin git@github.com:your-username/repo.git (fetch)
origin git@github.com:your-username/repo.git (push)
upstream https://github.com/original-owner/repo.git (fetch)
upstream https://github.com/original-owner/repo.git (push)
2. 从 upstream
拉取更新
(1) 获取 upstream
的最新代码
sql
git fetch upstream
(2) 合并 upstream
的更新到你的本地分支
假设你想同步 upstream/main
到你的 main
分支:
css
git checkout main # 切换到你的本地 main 分支
git merge upstream/main # 合并 upstream 的 main 分支
如果出现冲突,需要手动解决后提交:
sql
git add .
git commit -m "Merge upstream changes"
(3) 推送到你的 origin
(Fork 仓库)
css
git push origin main
3. 更新 upstream
的 URL(如果需要修改)
如果 upstream
地址有变(如从 HTTPS 切换到 SSH):
kotlin
git remote set-url upstream git@github.com:original-owner/repo.git
4. 删除 upstream
(如果需要)
arduino
git remote remove upstream
5. 典型工作流示例
场景:你 Fork 了一个仓库,现在想同步原始仓库的最新代码。
bash
# 1. 添加 upstream(原始仓库)
git remote add upstream https://github.com/original-owner/repo.git
# 2. 获取 upstream 的最新代码
git fetch upstream
# 3. 切换到你的本地 main 分支
git checkout main
# 4. 合并 upstream 的 main 分支
git merge upstream/main
# 5. 推送到你的 origin(Fork 仓库)
git push origin main