当上游仓库更新后,如何同步 Fork 仓库(本地 + 个人远程)?

626 阅读3分钟

在开源协作或项目开发中,我们经常会通过 Fork 上游仓库来创建自己的副本(个人远程仓库),再克隆到本地进行开发。但上游仓库往往会持续更新,如何让我们的本地仓库和个人远程仓库与上游保持同步呢?本文将详细介绍完整的操作流程。

一、核心概念:明确三个仓库的关系

在开始操作前,先理清涉及的三个关键仓库:

  • 上游仓库(Upstream) :原始仓库,由项目维护者管理,是所有更新的源头,我们通常只有读取权限
  • 个人远程仓库(Origin) :从上游仓库 Fork 而来的个人副本,托管在 GitHub/GitLab 等平台,我们拥有完全权限
  • 本地仓库(Local) :克隆个人远程仓库到本地的副本,供我们日常开发使用

二、准备工作:为本地仓库配置上游地址

当我们克隆个人远程仓库到本地后,默认只关联了个人远程仓库(Origin)。要同步上游更新,需先添加上游仓库地址,此步骤只需执行一次。

  1. 查看当前已关联的远程仓库:

    git remote -v
    

    此时通常只会显示个人远程仓库(Origin)的地址

  2. 添加上游仓库地址:

    git remote add upstream 上游仓库的URL
    

    例如:git remote add upstream https://github.com/original-owner/original-repo.git

  3. 验证配置是否成功:

    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

四、总结

同步上游仓库更新的核心流程可以概括为:

  1. 首次配置:添加上游仓库地址(git remote add upstream

  2. 日常同步:

    • 拉取上游更新到本地(git pull upstream 分支名
    • 推送本地更新到个人远程(git push origin 分支名

通过这套流程,就能确保你的本地仓库和个人远程仓库始终与上游仓库保持同步,为后续的开发和贡献打下基础。