提交代码按了stash all changes本地代码不见了

本文详细介绍了在VSCode中使用Git Stash功能时,代码看似消失后的恢复步骤。通过git stash、git stash list和git stash pop等命令,可以找回并恢复未提交的更改,避免因误操作导致的代码丢失。

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

在VScode里写完代码后准备提交,由于可以直接按键直接提交到远程仓库,就没咋输入命令,以前是一个一个文件的add,然后按提交,这次我直接点了个stash all changes,如下图
,然后按√提交,结果说
nothing to commit, working directory clean,纳尼,什么鬼,我代码呢?全不见了!差点气得吐血,但是觉得自己按的那个键是没有错的,咩有删掉,stash的意思是将文件放到暂存区栈里去了,代码没有提交,工作区处于游离状态,对git stash命令理解不透彻,误以为代码不见了。

然后,恢复方法:

①输入命令:git fsck --lost-found

然后到项目文件夹git目录下的 /.git/lost-found/other里有你add过的文件

中可以看到很大串字符串的一些文件,我举例其中一个:

fbffb1fddab3f45c937e1fa7b9ba2b0b6a53b965

然后复制这些字符,在git 中输入:

git show fbffb1fddab3f45c937e1fa7b9ba2b0b6a53b965
可以查看是否是你以前stash保存的代码。

然后就可以使用:

 git merge fbffb1fddab3f45c937e1fa7b9ba2b0b6a53b965

如果以上方法不适用,我由于发现代码不见之后按了一次ctrl+Z,文件只恢复了一个,用这种方法后 只看到了一个以前提交过的的文件,并非这次“失踪”的代码。

所以看下面的方法并且熟悉命令:

②直接输入git stash ,git stash list 和 git stash pop,

文件就找回来了。开心惨了!然后提交代码到远程仓库!

stash原理是:先把工作区恢复到上次提交的内容,同时备份本地的修改,之后就可以正常的pull代码了,pull完成后,再进行stash pop将之前的修改返回到当前工作区。

git stash:备份当前工作区的内容,从最近一次提交中读取相关内容,让工作区保证和上次提交的内容一致,同时,将当前工作区的工作内容保存在Git栈中;

git stash 能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录

git stash pop:从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。如果存在多个stash的内容,所以用栈来管理,pop会从最近一个stash栈中读取内容并恢复。注:该命令将堆栈中最近保存的内容删除(栈是先进后出)

git stash list:显示Git栈中所有的备份,利用列表来决定从哪个地方恢复。

git stash clear:清空Git栈。

如果要放弃本地的修改:

git reset --hard

git pull origin 分支名

执行 git reset --hard commid_id (坏灭性操作)这个命令是强制回退到某一次历史commit的版本,并清除本地修改!

find .git/objects -type f  |  xargs  ls -lt  |  sed   60q:找回本地仓库里边最近add的60个文件,找回思路同上

总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。

参考:https://www.jianshu.com/p/b2e5a6611183

 

Git 中,`Stash` 是一个非常实用的功能,用于临时保存当前工作目录中的修改,而不将其提交到版本历史中。这在需要切换分支或拉取最新代码时特别有用。 ### 使用 Stash 保存修改 1. **暂存当前的修改** 如果你已经在工作目录中进行了修改,但还不想提交这些更改,可以使用以下命令将这些更改保存到 Stash 中: ```bash git stash ``` 这条命令会将所有未提交的修改(包括暂存区和非暂存区的更改)保存到一个临时区域,并将工作目录恢复到最后一次提交的状态[^5]。 2. **给 Stash 添加描述** 为了方便后续查找,可以在保存时添加一条描述信息: ```bash git stash save "描述信息" ``` 例如: ```bash git stash save "修复登录页面样式问题" ``` 3. **查看 Stash 列表** 可以通过以下命令查看当前所有的 Stash 记录: ```bash git stash list ``` 每个 Stash 条目都会显示一个唯一的标识符(如 `stash@{0}`)以及保存时的描述信息[^5]。 4. **应用 Stash 中的修改** 当你需要恢复之前保存的修改时,可以使用以下命令: ```bash git stash apply ``` 如果有多个 Stash 条目,可以通过指定标识符来选择特定的记录: ```bash git stash apply stash@{1} ``` 5. **删除 Stash 条目** 应用完 Stash 后,如果不再需要该记录,可以手动删除它: ```bash git stash drop stash@{0} ``` 或者,在应用的同时删除: ```bash git stash pop ``` 6. **清理所有 Stash 条目** 如果想要一次性清除所有 Stash 记录,可以使用: ```bash git stash clear ``` ### 在 IntelliJ IDEA 中使用 Stash 如果你使用的是 IntelliJ IDEA,操作会更加直观: - **暂存修改**:右键点击项目名 -> Git -> Repository -> Stash Changes。 - **恢复修改**:右键点击项目名 -> Git -> Repository -> UnStash Changes。 - **查看 Stash 列表**:在 UnStash Changes 窗口中,可以看到所有已保存的 Stash 条目,并可以选择要恢复的条目[^1]。 ### 注意事项 - Stash 不是长期存储解决方案,建议在完成相关任务后及时清理不必要的 Stash 条目。 - Stash 默认不会包含未跟踪的文件(即从未被 Git 管理过的文件)。如果你想将这些文件也一并暂存,可以使用 `-u` 参数: ```bash git stash -u ``` 或者: ```bash git stash save -u "描述信息" ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值