如何恢复本地已删除分支中已提交但未推送至远程的变更
误删未push本地分支的提交找回方案
- 首先明确:只要你之前的本地提交已经执行过
git commit,且删除分支后没有主动执行git gc清理操作,绝大多数情况都可以通过Git本地reflog找回,你后续执行的fetch远程分支操作不会修改本地reflog记录,不影响找回流程。
步骤1:定位丢失的提交哈希
执行以下命令查看本地所有HEAD变更历史:git reflog
输出的每条记录对应一次本地Git操作,你可以根据commit的注释、操作时间找到删除分支前你最后提交的那条记录,每条记录开头的7位字符串就是对应commit的哈希值,将需要恢复的commit哈希记为<commit-hash>。
可选优化:如果记录过多可以缩小查找范围,比如查找最近24小时的提交:
git reflog --since="24 hours ago",或者按提交注释关键词过滤:git reflog --grep="你的提交注释关键词"
步骤2:恢复提交到本地分支
执行以下命令基于找到的commit哈希新建分支,就能完整恢复所有未push的本地变更:git checkout -b <恢复后的分支名> <commit-hash>
执行完成后,所有之前的本地提交都会完整保存在这个新分支中,可正常执行push、合并等后续操作。
极端情况说明
如果执行git reflog后无法找到对应提交,大概率是间隔时间过长触发了Git自动垃圾清理,这种情况无通用恢复方案,绝大多数近期误删场景都可以通过上述方法找回。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

