如何恢复修改历史后丢失的Git分支及提交Three?
恢复Git中被drop并强制推送后的提交
操作回顾
- 创建分支:
git checkout -b myBranch - 在分支上完成3次提交:One、Two、Three
- 执行交互式变基:
git rebase -i origin/master - 变基时设置:
pick One drop Two drop Three - 强制推送修改后的历史:
git push -f
当前问题
本地分支无法访问,仅能操作origin;GitLab显示Three的哈希ID,但无法检出依赖Two的Three提交;重新克隆仓库后,git reflog无Three相关记录,远程分支历史已被修改。
恢复步骤
1. 直接尝试检出已知提交哈希
先尝试直接检出GitLab提供的Three的提交哈希:
git checkout <Three的完整哈希ID>
如果Git提示缺少父提交(Two),继续下一步。
2. 从远程仓库找回父提交(Two)
Git远程仓库在垃圾回收执行前,会暂存被删除的历史对象,可以通过以下步骤找回:
拉取远程仓库的所有对象(包括未引用的):
git fetch origin --unshallow git fetch origin refs/heads/*:refs/remotes/origin/*查看Three提交的详细信息,获取其父提交(Two)的哈希:
git cat-file -p <Three的哈希ID>输出内容中
parent字段对应的就是Two的提交哈希。依次恢复提交并创建新分支:
# 检出Two的提交 git checkout <Two的哈希ID> # 应用Three的提交 git cherry-pick <Three的哈希ID> # 创建新分支保存恢复的提交 git checkout -b recovered-myBranch
3. 求助GitLab管理员
如果上述方法无法找回提交,联系GitLab管理员查询仓库的定期备份,从备份中恢复对应的提交对象。
内容的提问来源于stack exchange,提问作者Jan Hackenberg
相关产品推荐
相关产品推荐

