如何在多级Fork的Git项目中同步上游原始仓库的更新?
三层Git仓库同步工作流方案
无需手动对比diff拷贝代码,完全兼容你现有的工作流,操作步骤如下:
第一步:新增original远程仓库指向
你本地仓库已经绑定了两个远程:origin(你自己的repo A)、upstream(官方main repo),新增第三个远程指向上游的original仓库:
git remote add original <original-repo的HTTPS/SSH克隆地址>
配置完成后可以执行git remote -v确认所有远程地址配置正确。
第二步:同步前对齐本地分支与官方main repo
每次要合并original的更新前,先保证本地的主分支(master/main)和官方main repo的最新代码完全一致,避免产生多余冲突:
git checkout master git pull upstream master
如果怕操作污染主分支,也可以新建一个临时同步分支操作,更加安全:
git checkout -b sync-original-$(date +%Y%m%d) upstream/master
第三步:合并original的更新
根据original的更新量选两种操作方式即可:
- 若original更新提交量少(通常就几个提交):优先用cherry-pick保留提交历史
- 拉取original的最新代码到本地缓存:
git fetch original - 查看original所有未同步的提交:
git log original/master --oneline - 把需要合并的提交按顺序逐个cherry-pick到当前分支:
git cherry-pick <提交哈希值> - 遇到冲突解决后执行
git add .,再运行git cherry-pick --continue即可完成单条提交的合并
- 拉取original的最新代码到本地缓存:
- 若original一次更新的提交较多,不需要保留原始提交历史:用squash合并成单条提交
- 拉取original最新代码:
git fetch original - 执行合并命令将所有差异合并到当前分支的暂存区:
git merge --squash original/master - 解决所有冲突后执行提交,提交信息标注清楚同步的时间范围即可,比如
git commit -m "合并original repo 2024年X月X日前的所有更新"
- 拉取original最新代码:
第四步:走原有提交流程
合并完成且验证功能正常后,按你原来的工作流推送到自己的repo A,再给官方main repo提PR即可,整个操作对其他协作人员完全透明,不会影响现有开发流程。
注意事项
- 合并冲突时优先以main repo的现有业务逻辑为准,original的更新仅作为补充
- 同步操作建议每次只合一个时间点的original更新,不要跨多个版本合并,降低冲突处理难度
内容的提问来源于stack exchange,提问作者point618
相关产品推荐
相关产品推荐

