在开源协作或项目开发中,我们经常会通过 Fork 上游仓库来创建自己的副本(个人远程仓库),再克隆到本地进行开发。但上游仓库往往会持续更新,如何让我们的本地仓库和个人远程仓库与上游保持同步呢?本文将详细介绍完整的操作流程。
一、核心概念:明确三个仓库的关系
在开始操作前,先理清涉及的三个关键仓库:
- 上游仓库(Upstream) :原始仓库,由项目维护者管理,是所有更新的源头,我们通常只有读取权限
- 个人远程仓库(Origin) :从上游仓库 Fork 而来的个人副本,托管在 GitHub/GitLab 等平台,我们拥有完全权限
- 本地仓库(Local) :克隆个人远程仓库到本地的副本,供我们日常开发使用
二、准备工作:为本地仓库配置上游地址
当我们克隆个人远程仓库到本地后,默认只关联了个人远程仓库(Origin)。要同步上游更新,需先添加上游仓库地址,此步骤只需执行一次。
-
查看当前已关联的远程仓库:
git remote -v此时通常只会显示个人远程仓库(Origin)的地址
-
添加上游仓库地址:
git remote add upstream 上游仓库的URL例如:
git remote add upstream https://github.com/original-owner/original-repo.git -
验证配置是否成功:
git remote -v成功后会同时显示 origin(个人远程)和 upstream(上游仓库)的地址
三、同步流程:将上游更新同步到本地和个人远程
当上游仓库有新的更新时,按以下步骤同步:
步骤 1:拉取上游仓库的最新更新到本地
方法1
首先确保本地工作区干净(无未提交的修改),然后执行:
# 拉取上游仓库main分支的最新代码(若上游主分支为master则替换)
git pull upstream main
- 若出现冲突:打开冲突文件,手动解决冲突后,执行
git add .和git commit -m "解决与上游仓库的冲突" - git pull 是拉取仓库加合并到本地
方法2
# 先切换到本地main分支
git checkout main
# 拉取远程更新(仅下载,不合并)
git fetch upstream
# 将远程upstream/main分支的更新合并到本地main分支
git merge upstream/main
步骤 2:将本地同步后的代码推送到个人远程仓库
本地获取上游更新后,需要将这些更新推送到个人远程仓库,保持两者一致:
# 推送本地更新到个人远程仓库的main分支
git push origin main
四、总结
同步上游仓库更新的核心流程可以概括为:
-
首次配置:添加上游仓库地址(
git remote add upstream) -
日常同步:
- 拉取上游更新到本地(
git pull upstream 分支名) - 推送本地更新到个人远程(
git push origin 分支名)
- 拉取上游更新到本地(
通过这套流程,就能确保你的本地仓库和个人远程仓库始终与上游仓库保持同步,为后续的开发和贡献打下基础。