git checkout或者git pull后本地未提交代码丢失问题解决

本文介绍了在使用Git时如何恢复未提交即被覆盖的代码。关键步骤包括通过git reflog找到丢失代码的版本,然后使用git reset --hard命令回滚到指定版本。特别提醒,必须先执行git add.及git commit才能记录版本变化。如果使用git reset --hard HEAD@{1}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

我们在使用git管理代码时通常要提交和拉取代码,但是某些时候存在误操作的行为。例如代码还没提交就做了checkout、pull动作,导致写了几天的代码没有备份就丢失或者被覆盖了

解决方法

  1. 恢复前提
    在执行git checkout master或者git pull命令前,执行过git add .及commit命令git commit -m "xxx",git工具才能给你记录你的版本变化(本地的),否则丢失代码可能无可挽救
  2. 回滚
    (1)查看历史本地git版本:git reflog。运行结果如下图所示,现在需要回滚到checkout之前的版本,也就是commit:add new page of xxx那一个版本,该版本索引是最前面的字符串 210ddf5
    在这里插入图片描述
    (2)运行回滚命令git reset --hard 210ddf5,运行结果如下图所示,那么就成功回滚了。
    在这里插入图片描述

排坑

  1. 有些博客写的回滚命令是git reset --hard HEAD@{1},其中花括号里面的数字对应回滚版本id。但是本人运行不能回滚,出现错误(error: unknown switch `e’)如下图。
    在这里插入图片描述

参考文献

git学习教程
通过git命令回滚
通过编译器的功能恢复文件的方法

### 解决方案 当遇到本地存在提交更改,在执行 `git pull` 或者其他操作后发现这些更改似乎消失了,可以采取以下措施来尝试恢复: 对于尚被覆盖完全的改动,如果只是因为冲突或者其他原因能成功应用更新而看起来“消失”,那么可以通过重置索引来重新获取它们。具体来说,使用命令: ```bash git reset --mixed HEAD ``` 这会将索引(即即将提交的内容列表)重置到最近一次提交的状态,但是工作树中的文件不会受到影响,因此那些添加至暂存区的变化将会保留下来[^1]。 另外一种情况是,在进行了 `git fetch` 后紧接着做了合并(`merge`)或是变基(`rebase`)的操作,并且在此过程中选择了错误的方式处理冲突或者是误操作导致了部分修改丢失。此时应该查看 Git 的 reflog 来寻找最后一次已知良好状态下的 commit ID 。通过下面这个命令可以获得历史记录摘要: ```bash git reflog ``` 找到合适的 commit hash 后,则可以根据实际情况决定是要回滚整个项目版本还是仅恢复特定文件/目录。如果是后者的话,可利用如下指令实现单个文件级别的撤销: ```bash git checkout <commit-hash> -- path/to/file ``` 值得注意的是,在进行任何上述提到的数据恢复动作前,请务必确认当前的工作环境确实处于不理想状况之中;有时候看似“遗失”的变更实际上可能是由于分支切换等原因暂时不可见而已。此外,为了避免将来再次遭遇类似困境,建议养成良好的习惯——经常性地保存进度(即使是很小幅度),比如及时创建新的 commits ,以及合理运用 stash 功能临时存放不想立刻丢弃却又不便立即提交的小修小改[^2]。 最后提醒一点,以上方法适用于大多数常规情形下找回意外丧失掉的局部变动,但对于已经被彻底清除或者覆盖的数据而言则无能为力。所以在日常开发流程里一定要重视备份机制的重要性[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值