Git stash apply操作后丢失未暂存文件,如何找回?
Git暂存变更丢失的排查与解决
操作复盘
你当时的操作流程:
- 用
git stash暂存本地修改,此时仓库存在已暂存/本地提交的文件,还有同一文件分块暂存后剩余的未暂存变更 - 执行
git pull --rebase同步远程变更 - 执行
git stash apply后误以为未暂存变更丢失,实际是后续误提交后用错误方式重置提交,才导致变更暂时“消失”,最终通过正确操作找回
关键知识点
- 默认
git stash会把已暂存和未暂存的变更全部打包,但git stash apply只会将所有变更恢复为未暂存状态,不会还原原来的暂存/未暂存分区。如果要保留原分区状态,确实应该用git stash apply --index。 - 执行
git reset时,git reset --hard HEAD^会彻底丢弃所有未提交的变更,而git reset HEAD^(默认--mixed模式)会保留未暂存变更,这是你之前操作失误的核心点。
正确找回与修正流程
- 查看提交历史定位错误提交:
git log --oneline - 回退错误提交但保留未暂存变更:
git reset HEAD^ - 重新分块选择需要提交的内容:
git add -p - 提交正确的变更:
git commit -m "提交修正后的内容" - 若需要恢复原stash的分区状态,先查看stash列表:
再用指定参数恢复:git stash listgit stash apply --index stash@{0}
后续避坑建议
- 用
git stash保存或恢复时,若要保留暂存/未暂存的分区状态,必须加--index参数 - 执行
git reset前,确认是否需要保留未提交变更,避免误用--hard参数 - 恢复stash前,可先用
git stash show -p stash@{n}查看具体变更内容,确认后再操作
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

