如何找回GitHub上被旧代码意外覆盖的新代码
GitHub仓库旧代码覆盖新代码后的找回方案
优先排查本地Git操作记录
- 执行
git reflog查看所有本地HEAD变动记录,包含被覆盖的提交、未推送提交、重置操作等,找到对应新代码的提交哈希(格式类似a1b2c3d HEAD@{1}: commit: 新增XX功能) - 确认目标提交哈希后,可执行
git reset --hard <目标提交哈希>直接回退到对应版本
注意:执行
git reset --hard前建议先把当前工作区所有文件手动备份到其他目录,避免误操作导致二次丢失
- 如果你需要保留当前分支的改动,也可以执行
git cherry-pick <目标提交哈希>,单独把丢失的新代码提交合并到当前分支
检查远程仓库的留存提交
- 如果新代码之前已经推送到过远程仓库,先执行
git fetch origin拉取全量远程提交记录,再执行git log origin/<你的分支名>查看远程提交历史,找到目标提交哈希后按上述方法恢复即可 - 如果你是通过
git push --force强制覆盖了远程分支,可以直接访问GitHub仓库网页端,进入「Commits」页面搜索你之前提交新代码的提交信息,GitHub会保留一段时间的历史提交记录,哪怕被强制覆盖也能查到对应哈希,拿到哈希后回到本地执行git fetch origin <目标提交哈希>拉取对应提交,再做恢复操作
找回未提交的新代码
如果你丢失的新代码还没有执行过git commit就被覆盖,可通过以下方式找回:
- 执行
git fsck --lost-found查找悬空的Git对象,所有未被引用的文件都会存放到.git/lost-found/other目录下,打开对应文件逐份查看即可找回代码片段 - 检查你使用的IDE的本地历史记录:JetBrains系列IDE可右键项目选择「Local History」→「Show History」查看全量本地修改,VS Code可打开对应文件的「Timeline」面板查看单文件修改历史,多数情况下可以找到未提交的最新修改
内容的提问来源于stack exchange,提问作者BarakOren
相关产品推荐
相关产品推荐

