Git 代码误删除恢复

发布时间:2026/5/27 6:50:37

Git 代码误删除恢复 Git 误删代码并已合并到 master 的完整恢复流程事故描述在特性分支11898472上提交了重要代码提交e069f0fc“#11898472 机房路由图标处理 2”。错误执行了git reset将分支回退到很久之前的版本a863d109导致大量代码在分支上消失。将回退后的11898472分支直接合并到了远程master导致团队所有人的master丢失了 3 天的代码。恢复目标找回丢失的代码。修复远程master分支且不能强制推送避免影响其他同事。完整操作步骤1. 查看操作历史定位丢失的提交gitreflog找到被误删前的最后一次提交例如e069f0fc HEAD{8}: commit (merge): #11898472机房路由图标处理2记下这个哈希e069f0fc。2. 恢复本地特性分支到正常状态gitcheckout11898472gitreset--harde069f0fc此时11898472分支的代码已恢复。3. 强制更新远程特性分支gitpush-forigin11898472覆盖掉远程错误的11898472分支历史。4. 第一次合并将恢复后的特性分支合入 mastergitcheckout mastergitmerge11898472gitpush origin master这一步将找回的代码带入master但由于历史中已经存在错误的合并提交直接合并可能无法完全逆转代码丢失或者只是为了后续revert做准备。实际上我们还需要一个反向提交来精准撤销错误合并的影响。5. 在特性分支上生成反向提交revert 错误合并找到将错误代码带入master的那次合并提交例如从reflog中找到的2a1964dd那次合并把回退后的11898472并入了master。在11898472分支上执行gitcheckout11898472gitrevert-m12a1964ddgitpush origin11898472-m 1保留主线master撤销被合并分支11898472引入的所有更改。这会生成一个新的提交内容上等于把master恢复到错误合并前的状态但历史记录是前进的不会改写已共享的历史。6. 第二次合并将 revert 提交合入 master最终修复gitcheckout mastergitmerge11898472gitpush origin master这次合并把刚才的反向提交带入master从而让master上的代码全部恢复。所有人的仓库在正常pull后即可得到修复后的代码。关键原则特性分支可使用reset --hardpush -f因为通常只有个人使用。共享分支如 master绝对禁止push -f或reset远端历史。必须通过git revert生成新的提交来撤销错误这样其他同事只需pull就能同步修复不会造成强制覆盖或历史分叉。命令速查表步骤命令查找丢失提交git reflog恢复本地分支git reset --hard 正确提交哈希强制推送特性分支git push -f origin 分支名撤销错误合并生成反向提交git revert -m 1 错误合并的哈希推送反向提交git push origin 分支名将修复合并到 mastergit checkout master git merge 分支名 git push origin master补充说明如果后续还想把当初e069f0fc的那次提交以正常历史重新引入master可以再执行一次git revert revert提交的哈希即反向的反向恢复原始更改。操作前建议对整个仓库做一次备份以防万一。

相关新闻