631 字
2 分钟
Git 实战:三种方法让你的 Fork 仓库与上游保持同步
“We loved with a love that was more than love.”
场景描述: 当我们在 GitHub 上 Fork 了一个开源项目后,原作者(Upstream)更新了代码,而我们的 Fork 仓库还停留在旧版本。如何将上游的更新合并到我们的仓库中?本文提供三种解决方案:不仅包含最简单的 UI 操作,还有硬核的 CLI 命令,以及“懒人必备”的 GitHub Actions 自动化脚本。
方法一:GitHub 网页端一键同步 (最简单)
从 2021 年开始,GitHub 原生支持了网页端同步功能,适合绝大多数普通用户。
- 打开你的 Fork 仓库页面。
- 点击代码列表上方的 Fetch upstream 下拉菜单。
- 点击 Fetch and merge 按钮。

优点:无需任何命令,操作极简。 缺点:需要手动点,且解决冲突能力较弱。
方法二:Git 命令行同步 (最专业)
如果你是开发者,建议掌握命令行(CLI)方式,因为这能让你完全控制合并过程,方便处理代码冲突。
1. 配置上游仓库
首先,我们需要告诉本地 git,“上游”在哪里。
# 查看当前远程仓库git remote -v# 输出通常只有 origin (你的仓库)
# 添加上游仓库 (请将 URL 替换为原作者的仓库地址)git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git
# 再次查看,应该能看到 upstreamgit remote -v2. 拉取并合并
# 1. 切换到主分支 (main 或 master)git checkout main
# 2. 从上游拉取最新代码到本地缓存git fetch upstream
# 3. 将上游代码合并到你的本地分支git merge upstream/main
# 4. 推送到你的 GitHub 仓库git push origin main优点:完全控制权,可处理复杂冲突。 缺点:步骤较多,需要 Git 基础。
方法三:GitHub Actions 定时自动同步 (最省心)
如果你 Fork 仓库是为了做一个镜像(Mirror),或者单纯想保持最新而懒得手动去点,可以使用 GitHub Actions 设置定时任务。
1. 创建工作流文件
在你的仓库中,点击 Actions -> New workflow,创建一个名为 .github/workflows/sync.yml 的文件。
如果你 Fork 的仓库里已存在其他工作流,点击 Actions 后可能需要先点击 New workflow,如下图所示:

2. 填入配置代码
复制以下 YAML 内容,并务必修改第四步中的上游仓库地址。
name: Upstream Sync
permissions: contents: write
on: schedule: - cron: "0 0 * * *" # 每天 UTC 时间 0:00 (北京时间 8:00) 执行一次 workflow_dispatch: # 允许手动点击按钮触发
jobs: sync_latest_from_upstream: name: Sync latest commits from upstream repo runs-on: ubuntu-latest if: ${{ github.event.repository.fork }}
steps: # 第一步:检出代码 - name: Checkout target repo uses: actions/checkout@v3
# 第二步:执行同步动作 - name: Sync upstream changes id: sync uses: aormsby/Fork-Sync-With-Upstream-action@v3.4 with: # ⚠️⚠️ 请修改下方这两行!填入原作者的仓库地址和分支 ⚠️⚠️ upstream_sync_repo: original-author/original-repo upstream_sync_branch: main
# 你的分支名 target_sync_branch: main target_repo_token: ${{ secrets.GITHUB_TOKEN }} test_mode: false
# 第三步:检查是否失败(通常是因为上游改动了 workflow 文件,出于安全 GitHub 会暂停自动更新) - name: Sync check if: failure() run: | echo "[Error] 自动同步失败。可能是上游仓库更新了 .github/workflows 文件。" echo "请手动前往 GitHub 界面 Fetch Upstream 一次以恢复自动化。" exit 1请参考下图说明进行修改:

以下是配置完成后的完整代码示例图(注意:部分密钥无需手动填写):

3. 注意事项
- 首次运行:创建完文件后,建议切到 Actions 页面手动触发一次(Run workflow)以验证配置是否正确。
- 保护机制:如果上游仓库修改了 workflow 文件,GitHub 为了安全会暂停你的自动任务,此时需要手动 Sync 一次来重新激活。
总结
- 偶尔同步:直接用 方法一(网页点一下)。
- 开发代码:必须用 方法二(命令行),因为你需要处理 Merge 冲突。
- 纯粹备份:使用 方法三(Actions),设置好后就可以当甩手掌柜了。
免责声明
- 本文提供的自动化脚本仅用于合规的开源项目同步。
- 请勿用于恶意克隆或违反 GitHub 服务条款的行为。
- 自动化同步可能会覆盖你对仓库的自定义修改,请谨慎使用。
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Git 实战:三种方法让你的 Fork 仓库与上游保持同步
https://levifree.dpdns.org/posts/git-sync-fork-upstream-guide/ 部分信息可能已经过时
相关文章 智能推荐
1
Git 冲突处理实战手册:从定位到收敛的一套标准流程
Git 告别手忙脚乱:处理 merge/rebase 冲突时的步骤、命令与风险控制
2
Git Rebase vs Merge:团队 PR 工作流如何选才不翻车
Git 从提交历史可读性、冲突处理到回滚策略,给出可落地的协作规范
3
告别 git push -f:团队协作中的 Git Commit 规范指南
Git 如何写出优雅的 Commit Message?Conventional Commits 最佳实践
4
Python 自动化办公:5分钟写一个批量重命名脚本
Python 告别枯燥的手工劳动,用几十行代码拯救你的下班时间
5
OpenClaw 跨平台安装实战:Windows / Linux / macOS 一次讲清
AI 按官方推荐路径完成安装、网关启动与基础健康检查,避免第一步就卡住


