IDEA中git reset --mixed 后切分支导致代码丢失

踩坑经历

在 feature-a 分支上开发,想要回退几个版本重新整理逻辑。于是执行了 git reset --mixed <commit-id>。此时,回退的代码变成了“未提交的修改”,躺在工作区里。

此时我需要去 feature-b 分支查个东西,于是我在 IDEA 中直接点击切换到了 feature-b。

等我切回 feature-a 时,发现以下现象:

  • 那些原本 reset 出来的修改过的代码全没了。

  • 但是奇怪的是,新创建的文件(Untracked)却还在。

造成以上代码丢失的原因如下:

Git 的工作区(Working Directory)是不属于任何分支的。当执行 git reset --mixed 后,代码回到了“已跟踪但未提交”(Uncommitted & Modified)的状态。当点击切换分支时,IDEA 检测到工作区有未提交的修改,默认强制切换,丢弃本地修改以匹配目标分支(相当于执行了 git restore 或 git checkout -f)。


如何找回代码?

方法一:IDEA 的 Local History

IDEA 自身维护了一套独立于 Git 的“物理文件历史”。

  • 在项目根目录右键,选择 Local History -> Show History

  • 在左侧时间轴中,找到你 Checkout 或 Reset 之前的那个时间点。

  • 甚至能看到 IDEA 帮你执行删除操作的记录。

  • 右键点击那条记录,选择 Revert。

方法二:Git Reflog

如果你在 reset 之前,代码是已经 Commit 过的(只是想 reset 出来修改),那么 Git 仓库里其实还有备份。

  • 执行 git reflog。

  • 找到 reset 操作之前的那个 Commit Hash。

  • 执行 git reset --hard <那个Hash>。


最佳实践

切分支前保持工作区干净。可以考虑使用 Stash

如果你只是想去别的分支看一眼,稍后回来继续改

# 1. 暂存现场
git stash save "重置后的临时代码"

# 2. 切换分支去忙别的
git checkout feature-b

# 3. 回来后恢复
git checkout feature-a
git stash pop

总结

弄丢代码通常是“覆盖”操作弄丢的。而 IDEA的自动化操作有时会让这个覆盖过程变得悄无声息。遇到 reset 后切分支,谨记:先 Stash,再 Checkout。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值