You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何恢复修改历史后丢失的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远程仓库在垃圾回收执行前,会暂存被删除的历史对象,可以通过以下步骤找回:

  1. 拉取远程仓库的所有对象(包括未引用的):

    git fetch origin --unshallow
    git fetch origin refs/heads/*:refs/remotes/origin/*
    
  2. 查看Three提交的详细信息,获取其父提交(Two)的哈希:

    git cat-file -p <Three的哈希ID>
    

    输出内容中parent字段对应的就是Two的提交哈希。

  3. 依次恢复提交并创建新分支:

    # 检出Two的提交
    git checkout <Two的哈希ID>
    # 应用Three的提交
    git cherry-pick <Three的哈希ID>
    # 创建新分支保存恢复的提交
    git checkout -b recovered-myBranch
    

3. 求助GitLab管理员

如果上述方法无法找回提交,联系GitLab管理员查询仓库的定期备份,从备份中恢复对应的提交对象。

内容的提问来源于stack exchange,提问作者Jan Hackenberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:45:12