将现有仓库callsheet目录迁移至含初始提交的新仓库遇推送失败求助
可行迁移方案
步骤说明
1. 克隆原仓库的完整副本
先创建一个临时仓库,避免直接修改原仓库:
git clone orgRepo.git temp-repo cd temp-repo
2. 过滤并保留callsheet目录的历史
使用git filter-repo(官方推荐替代git filter-branch的工具),只保留callsheet目录的所有提交记录,并将该目录的内容移至仓库根目录:
git filter-repo --subdirectory-filter callsheet
若系统未安装
git filter-repo,可通过包管理器安装(如Ubuntu:apt install git-filter-repo)或pip安装:pip install git-filter-repo
3. 关联新仓库并拉取其现有历史
将新仓库添加为远程仓库,然后拉取它的master分支历史:
git remote add new-origin newRepo.git git fetch new-origin
4. 迁移历史至新仓库的初始提交之后
通过rebase --onto将过滤后的提交历史,接到新仓库master分支的最新提交之后,解决分支无共同祖先的问题:
git rebase --onto new-origin/master master
若过程中出现冲突,手动解决冲突后执行
git rebase --continue即可。
5. 推送迁移后的分支与标签
完成rebase后,推送分支和所有标签到新仓库:
git push new-origin master git push new-origin --tags
关键说明
你之前的操作失败,核心原因是原仓库的master分支与新仓库的master分支没有共同祖先,且原分支包含整个仓库的内容(并非仅callsheet目录),导致推送时因历史不一致被拒绝。上述方案通过过滤目录历史+重定向提交基线,解决了这个问题。
内容的提问来源于stack exchange,提问作者Harshita Porwal
相关产品推荐
相关产品推荐

