如何同步更新 GitHub 上 fork 的仓库
同步 fork 仓库:git remote add upstream <原仓库地址> 一次配置,之后 git fetch upstream && git merge upstream/main(或 rebase)再 push 到自己 fork。GitHub 网页也有 Sync fork 按钮一键同步。
命令行三板斧:① 添加原仓库为 upstream 远程(一次);② git fetch upstream;③ 合并 git merge upstream/main 并 push 到你的 fork。GitHub 网页端更简单:fork 仓库主页的 Sync fork 按钮点一下即可。
命令行方式
# 1. 添加上游远程(只做一次)
git remote add upstream https://github.com/原作者/仓库.git
# 2. 同步流程(之后每次)
git fetch upstream
git checkout main
git merge upstream/main # 或 git rebase upstream/main
git push origin main # 推到自己的 fork
网页方式
打开你的 fork 页面 → 右上 Sync fork → Update branch。注意:如果你 fork 的 main 上有自己的提交,网页同步会被拒,需要用命令行处理分叉。
保持功能分支同步
git checkout feature-x
git rebase upstream/main # 个人分支推荐 rebase 保持线性
常见问题(FAQ)
Q:merge 报 "refusing to merge unrelated histories"?
先核对 upstream 是否指向正确仓库,并检查是否为缺少历史的浅克隆。普通 fork 分叉仍有共同祖先,不应直接使用 --allow-unrelated-histories。保留本地工作后再决定合并、rebase,或明确放弃改动并对齐上游。
Q:能自动保持同步吗?
GitHub 没有官方自动同步。可用 GitHub Actions 定时任务(schedule cron)跑 fetch+merge+push 实现,社区有现成的 sync 模板。
Q:fork 的仓库改了默认分支名怎么办?
上游从 master 改 main 后,本地 git remote set-head upstream -a 刷新默认分支引用,再正常同步。