Git:如何将旧仓库WIP代码安全合并到主仓库子目录?
无需保留提交历史,将独立仓库子目录合并到主仓库指定路径的自动化方案
场景说明
团队维护的主仓库BigRepo已迁移并修改了foo插件,但旧仓库foo_workInProgress中仍有开发中的WIP功能需要合并到BigRepo/src/plugins/foo/src。由于历史无需保留,需要一种自动化方案替代手动git diff处理。
具体步骤
1. 在主仓库添加旧仓库为临时远程
进入主仓库目录,将旧仓库作为远程仓库添加并拉取内容:
cd /path/to/BigRepo git remote add -f foo_wip /path/to/foo_workInProgress
2. 导入旧仓库子目录到主仓库目标路径
使用git read-tree命令将旧仓库的src目录内容直接导入到主仓库的指定子目录,自动同步无冲突文件:
git read-tree --prefix=src/plugins/foo/src/ -u foo_wip/master:src
--prefix:指定主仓库中接收内容的目标路径(末尾的斜杠确保路径层级正确)-u:同时更新工作区和暂存区foo_wip/master:src:指定从旧仓库的master分支下的src目录读取内容(若旧仓库使用其他分支,替换master即可)
3. 解决合并冲突
执行命令后,Git会自动标记冲突文件,按常规方式处理即可:
- 直接编辑冲突文件,保留需要的代码内容
- 用
git add <冲突文件名>标记冲突已解决 - 也可使用
git mergetool启动可视化工具辅助处理
4. 提交合并结果
冲突解决完成后,提交本次合并的修改:
git commit -m "合并foo_workInProgress中的WIP修改到src/plugins/foo/src"
5. 清理临时远程(可选)
若后续无需再关联旧仓库,可移除临时添加的远程:
git remote remove foo_wip
方案优势
该方案自动化完成无冲突文件的同步,仅需手动处理冲突部分,比手动复制文件后对比diff更高效,且完全不需要保留或迁移提交历史,完美匹配需求。
内容的提问来源于stack exchange,提问作者Exalted Toast
相关产品推荐
相关产品推荐

