多次执行git stash及apply后如何找回首次stash前的本地代码
找回第一次stash前代码版本的操作方法
Git的stash采用栈结构存储所有暂存记录,只要你没手动执行过stash清空、删除操作,所有历史stash条目都完整留存,完全可以恢复目标版本,操作步骤如下:
- 首先执行命令查看所有stash暂存条目,确认对应记录:
git stash list
命令输出示例如下:
stash@{0}: WIP on dev: 8f3d217 fix: 登录接口参数校验 stash@{1}: WIP on dev: 8f3d217 fix: 登录接口参数校验
stash序号遵循栈规则:最新生成的暂存条目序号最小,你第二次执行stash生成的记录对应stash@{0},第一次执行stash生成的记录对应stash@{1},条目后附带的分支、提交信息可以帮你确认对应关系。
- 根据你当前工作区的需求,选对应方案恢复即可:
- 不需要保留当前工作区内容,直接回到第一次stash前的状态
先执行git reset --hard HEAD清空当前工作区的修改(注意:该操作会永久丢弃当前未提交的改动,确认不需要后再执行),再执行git stash apply stash@{1}应用第一次的暂存记录,执行完成后工作区状态就和你第一次执行git stash前完全一致。 - 需要保留当前工作区内容,单独导出第一次stash的状态
执行git stash branch recover-stash-v1 stash@{1},该命令会自动创建名为recover-stash-v1的新分支,切换到该分支后会自动完整应用第一次stash的所有内容,不会影响你当前分支的工作区状态,你可以在新分支确认内容后,再按需合并、拷贝到目标分支。
- 不需要保留当前工作区内容,直接回到第一次stash前的状态
注意事项
- 执行
git stash apply不会删除对应的stash条目,只要你没手动执行git stash drop、git stash clear操作,暂存记录会一直保留,操作出错可以随时重试。 - 担心操作失误的话,可以先执行
git stash把当前工作区的内容临时暂存做备份,再执行恢复操作,出问题随时可以回退到备份状态。
内容的提问来源于stack exchange,提问作者SSK
相关产品推荐
相关产品推荐

