Git subtree push失败提示未知修订版本,缺失git-subtree-split提交如何解决
报错原因
git subtree推送时依赖历史执行拆分操作生成的git-subtree-split类型提交记录匹配子仓库历史,该记录丢失通常是因为对主仓库做了变基、提交回滚、git垃圾回收清理了松散对象导致的,找不到对应哈希就会触发本次报错。
解决方案
方案1:快速绕过报错完成推送
无需找回历史提交,给推送命令加上--ignore-joins参数,强制重新拆分当前指定前缀目录的所有提交,生成新的拆分记录即可完成推送:
git subtree push --ignore-joins --prefix themes/natra https://github.com/OpenSID/tema-natra.git premium
注:首次加该参数执行耗时会稍长,因为需要全量扫描主仓库历史中与该前缀目录相关的提交,推送完成后新的拆分记录会自动存入主仓库,后续再执行subtree操作无需再加该参数。
方案2:补全拆分记录永久修复
如果需要保留历史拆分逻辑避免后续每次全量扫描,可以手动执行拆分操作补回记录:
- 执行split命令生成分支并回填拆分记录
git subtree split --prefix themes/natra --rejoin --branch temp_natra_split
- 待命令执行完成后,再运行原本的推送命令即可正常执行
- 清理临时分支
git branch -D temp_natra_split
使用建议
- 尽量不要对包含
git-subtree-split记录的提交历史执行变基、squash合并操作,避免拆分记录丢失 - 若需要频繁操作子仓库,建议先将子仓库地址添加为远程源简化命令:
git remote add tema-natra https://github.com/OpenSID/tema-natra.git # 后续推送可直接执行简化命令 git subtree push --prefix themes/natra tema-natra premium
内容的提问来源于stack exchange,提问作者Eddie Ridwan
相关产品推荐
相关产品推荐

