TFS 2015报TF401029找不到提交ID,放弃分支合并后代码无法推送
根因定位
本次故障完全是服务端异常导致的,不是本地仓库的问题:
- 在TFS UI上放弃合并操作的瞬间,服务端对目标分支的Git引用做了不完整的回退操作,直接导致提交链断裂
- 本地执行
git show能查到对应提交,仅代表本地存储的提交对象本身是完整可读的,但本地提交链中关联的某一个父提交,已经被服务端判定为无效、不存在的状态,因此推送时直接被服务端拒绝 - 之前执行的
git remote prune origin、git gc --prune=now都是针对本地仓库的清理动作,完全碰不到服务端的异常状态,所以操作完故障没有任何变化。
分步解决方案
- 先做兜底备份:执行
git log --oneline TFS_200858_Get_Part_3 > ./branch_commit_backup.txt,把本地分支所有提交的哈希、说明全部导出存到文件里,就算后续操作出问题也能快速找回所有代码。 - 重建干净的提交链路:基于本地已确认可读的有效提交
C3929475ACE562721FB0E8957FB9B0D30BA123C4拉一个全新的恢复分支,执行git checkout -b TFS_200858_Get_Part_3_recovery C3929475ACE562721FB0E8957FB9B0D30BA123C4,把还没推上去的最新变更全部cherry-pick到这个新分支上,确保新分支的提交链不带着旧分支里那个服务端不认的无效父提交。 - 重建远程分支引用:把新分支先推成独立的远程临时分支,执行
git push origin TFS_200858_Get_Part_3_recovery;推送成功后,在TFS分支管理页把已经损坏的原分支TFS_200858_Get_Part_3删掉,再把刚推上去的恢复分支重命名回原来的分支名。 - 清除本地的异常缓存:执行
git fetch origin --prune,把本地之前缓存的坏分支引用清掉,这时候SDK首页一直弹的TF401029找不到提交的报错就会自动消失。
注意:如果账号没有删除、重命名远程分支的权限,千万别试
git push -f强制推原有分支——因为本地提交链里本来就带着服务端不认的无效父提交引用,就算开了强制推送权限,也会被服务端的提交校验逻辑打回来。直接找仓库管理员,让他在服务端手动清掉损坏分支上的无效提交指针,之后正常推送就行。
内容的提问来源于stack exchange,提问作者Pardeep Sharma
相关产品推荐
相关产品推荐

