修复存在错误拆分提交的Git Subtree问题
Git Subtree 推送失败修复方案求助
问题背景
仓库中存在一个多年前创建的Subtree,因拆分提交存在错误,执行git subtree push时出现报错。
报错信息
git push using: <remote> fatal: ambiguous argument '<sha>^{commit}': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]' could not rev-parse split hash <sha> from commit <sha>
排查发现的异常
git-subtree-dir为Git前缀名称(状态正常)git-subtree-split指向的哈希已不存在(状态异常)
原因推测
初始拆分操作是在未合并回主分支的分支上完成的,后续Subtree的拉取/推送操作切换到了另一分支,导致该拆分提交丢失。
不同Git版本的git-subtree push行为差异
- Git 1.8版本:报错并删除远程仓库中待推送的分支
- 较新版本:报错但仍执行推送操作,但遍历全仓库历史耗时极长
- 最新Git版本:直接报错并拒绝推送
已尝试的无效操作
执行git subtree split --prefix=<prefix> --rejoin --ignore-joins重新拆分,虽生成了新的拆分记录,但执行git subtree push时仍报相同错误,推测命令仍在读取旧拆分记录。
当前求助需求
最新Git版本下完全无法执行git subtree push,考虑修改2018年旧拆分的提交信息,但对如此早期的提交进行变基风险过高,寻求安全有效的修复方案。
内容的提问来源于stack exchange,提问作者shwick
相关产品推荐
相关产品推荐

