远程仓库被错误执行reset --hard,执行git fetch --all后如何恢复本地仓库?
Git 远程仓库硬重置后本地旧版本恢复方案
问题原因说明
你之前执行的git update-ref refs/remotes/origin/master refs/remotes/origin/master@{3}仅修改了本地存储的远程追踪分支的引用记录,没有同步变更本地工作区、本地master分支自身的指针,因此看到的内容仍和当前远程仓库一致。
具体操作步骤
- 第一步:查找目标旧版本的提交哈希
执行以下命令查看origin/master分支的所有历史变更记录,找到远程被reset --hard之前的目标提交对应的哈希值(每一行开头的7-8位字符就是提交哈希):git reflog show refs/remotes/origin/master - 第二步:将本地master分支重置到目标旧版本
先切换到本地master分支,再执行硬重置操作:
注意:该操作会清除本地master分支上未提交的改动,执行前请确认本地改动已备份或提交git checkout master git reset --hard <你刚才查到的目标提交哈希> - 第三步(可选):将修复后的版本推回远程仓库
如果需要修正远程仓库的错误重置,执行强制推送即可覆盖远程当前的错误版本:
注意:执行强制推送前请确认没有其他成员在远程仓库错误重置后提交了新内容,避免覆盖他人有效提交git push origin master --force
特殊情况处理
如果reflog中未找到目标提交(通常是reflog过期导致),可执行以下命令查找本地存储的所有悬挂提交,找到目标版本对应的哈希后再执行上述第二步操作:
git fsck --lost-find
内容的提问来源于stack exchange,提问作者bud
相关产品推荐
相关产品推荐

