如何将一个repo重置对齐到另一repo,同时保留自身新增改动?
最优方案推荐
这种场景下既不需要全量重新镜像repo1,也不需要手动回滚repo2的改动,用Git的rebase操作是成本最低的方案,完全匹配你「先对齐repo1最新状态,再把repo2的新增改动叠在最顶层」的需求。
具体操作步骤
- 第一步:本地克隆repo2仓库,添加repo1为上游远程源
git remote add upstream <repo1的仓库地址> - 第二步:拉取repo1的所有最新提交记录
git fetch upstream - 第三步:切换到repo2需要同步的开发分支,执行rebase操作(假设你需要同步repo1的main分支,可替换为对应分支名)
git checkout <repo2的开发分支名> git rebase upstream/main - 第四步:处理代码冲突,rebase过程中如果出现冲突,修改冲突文件后执行
git add <冲突文件名>,再运行git rebase --continue即可,直到所有rebase步骤执行完成 - 第五步:验证所有功能正常后,强制推送更新到远程repo2
git push -f origin <repo2的开发分支名>
其他方案的对比说明
- 全量重新镜像repo1:会直接覆盖repo2的所有改动,你需要手动重新把之前的新增改动复现一遍,操作成本极高,完全没有必要
- 手动回滚repo2改动再同步repo1:和全量镜像的问题类似,额外增加了手动回滚、手动复现改动的步骤,出错概率也远高于
rebase操作
注意事项
- 如果repo2是多人协作的仓库,强制推送前要先通知所有协作者同步最新的远程代码,避免其他人的本地提交被覆盖
- 如果你对操作结果没有把握,可以先从当前repo2的开发分支切出一个临时分支做rebase测试,验证没问题后再替换正式分支
内容的提问来源于stack exchange,提问作者dochoex
相关产品推荐
相关产品推荐

