You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并不同目录结构的Git仓库并保留classes文件双方提交历史的方案咨询

迁移旧仓库classes目录历史到新仓库操作步骤

操作前请提前备份两个仓库的本地代码,避免误操作丢失数据。

第一步:预处理旧仓库(仅保留classes目录历史并重写路径)

你需要先安装git-filter-repo工具,可通过pip install git-filter-repo或对应系统包管理器直接安装。

  • 克隆旧仓库到本地
    git clone <旧仓库BitBucket克隆地址> old-repo && cd old-repo
    
  • 过滤仓库仅保留classes目录,同时将路径重写为新仓库的对应路径
    git filter-repo --path project-atm/src/classes/ --path-rename project-atm/src/classes/:atm-app/main/default/classes/
    
    执行完成后旧仓库的所有非classes目录都会被移除,剩下的文件路径和新仓库classes目录完全一致,所有提交历史都会保留。

第二步:合并处理后的旧历史到新仓库

  • 进入本地新仓库目录,确保所有本地修改已提交或暂存,切换到你需要合并历史的目标分支
    cd /path/to/your/new-repo
    git checkout <目标分支名,比如main>
    
  • 将预处理完成的旧仓库添加为本地远程源
    git remote add old-processed ../old-repo
    
  • 拉取旧仓库的所有历史
    git fetch old-processed
    
  • 合并旧仓库历史,允许无关历史
    git merge --allow-unrelated-histories old-processed/main -m "chore: 合并旧仓库classes目录全量历史"
    
    如果出现同名文件冲突,直接执行git checkout --ours atm-app/main/default/classes/*保留新仓库的文件版本,再执行git commit即可,不会影响历史追溯

验证效果

合并完成后直接执行git blame atm-app/main/default/classes/你的目标文件.cls,即可查看该文件从旧仓库创建以来的完整提交历史,git log也能查到对应的旧提交记录。

原操作失败原因说明

你之前的操作没有对旧仓库的路径做重写映射,git默认将不同路径的文件识别为两个完全无关的文件,因此无法关联历史记录,也就无法通过blame查到旧提交。

Salesforce场景扩展

如果后续需要迁移其他元数据(比如trigger、lwc组件等)的历史,只需要在第一步预处理旧仓库时,新增对应的--path 旧路径 --path-rename 旧路径:新路径参数即可复用该流程。

内容的提问来源于stack exchange,提问作者zanstaszek9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:06:03