git reset --hard后的本地代码找回(commit和没有commit但add了两种情况)

        作为一个git的小白,今天踩了个大坑(大哭),踩坑过程如下,想看解决办法的直接跳过,看第二部分:

踩坑过程:

        1. 程序调试通过,开开心心commit,中间提示有代码检查错误,三个选项commit、concel、view(intellij idea编译器),点了view(划重点:因为选择的查看view,因此并没有commit成功。坑就是这时候挖的)。

        2.  view之后发现没啥大事,准备push。push的时候发现有一些不是我commit的东西(其实你压根没commit成功,当然不是你的变更啊啊啊!),误以为提交错了,打算撤回commit操作(路线完全跑偏)

        3. 执行 git reset --hard commid_id (就是这个坏灭性操作

        这个命令是强制回退到某一次历史commit的版本,并清除本地修改!

        再次很瞎的 在 git log 中捞了一次历史commit的版本号(其实仔细看时间会发现根本不是自己以为的那次commitid的),进行了回退。然后就发现本地代码全没了。。。

 

解决办法:

一、没有commit,没有add

对不起,找不回了,放弃吧。

二、没有commit,但是有add操作

执行:git fsck --lost-found

在项目git目录下的 /.git/lost-found/other里有你add过的文件。挨个看看,能救回来多少是多少吧。

再附送一个命令:find .git/objects -type f | xargs ls -lt | sed 60q

找回本地仓库里边最近add的60个文件。找回思路同上。

三、执行过commit

好吧,你很幸运。

执行 git  reflog

会有类似下面的东西,挑你想回退的地方,一般是那次commit之前的head,例如 HEAD@{7}

执行 git reset --hard HEAD@{7} 

心得:执行网上查的命令要当心啊,执行不懂的命令要当心啊啊啊啊

 

 

### 使用 `git reset --hard` 恢复本地仓库到最近一次提交状态 当需要将本地仓库恢复至最近的一次提交状态时,可以利用 `git reset --hard HEAD` 命令实现这一目标。此命令会使得当前分支的工作目录以及索引(即暂存区)完全匹配最近的一次提交记录,任何未被追踪的改动将会丢失,因此在执行前需确认无重要变更待保存[^1]。 如果已经进行了多次提交并希望返回特定的历史版本,则可以通过查看提交历史来获取想要回滚的目标提交ID: ```bash git log --oneline ``` 上述命令将以简洁形式展示所有的提交记录及其对应的哈希值。选定要恢复的具体提交后,可通过如下指令完成操作: ```bash git reset --hard [commit_id] ``` 这里 `[commit_id]` 是指具体的某次提交的唯一标识符的一部分或全部字符。需要注意的是,在使用带有 `--hard` 参数的情况下,所有不在该提交中的更改都会被永久移除,所以在采取行动之前最好先评估是否有价值保留这些变化[^4]。 对于那些尚未通过 `git add` 添加进暂存区域内的文件而言,它们不会受到基于已存在提交的操作影响;但是,一旦应用了 `git reset --hard` 并指定了某个过去的提交点作为新的起点,那么即使是最新的工作副本也会受到影响而发生改变,所以务必谨慎行事[^3]。 最后值得注意的是,虽然 `git reset --hard` 可以帮助快速撤消某些类型的错误,但它同样可能导致难以逆转的数据损失风险。为了安全起见,建议总是创建备份或者学习更多关于 Git 中撤销机制的知识以便更灵活地处理各种情况[^5]。
评论 59
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值