Git stash后如何回到之前提交?误删分支后如何恢复stash到新分支?
Git 问题解答
1. 执行git stash后如何回到之前的提交?
git stash会把当前工作区、暂存区的未提交修改暂存起来,执行完这条命令后,你本身就处于执行git stash时所在的提交状态。如果需要恢复暂存的修改,有两种常用方式:
- 恢复并删除stash记录:使用
git stash pop,这条命令会将最近一次暂存的修改应用到当前分支,同时删除该条stash记录。 - 恢复但保留stash记录:使用
git stash apply,只会应用修改,stash记录依然保留。如果有多个stash,可先用git stash list查看所有记录,再通过git stash apply stash@{n}(n为stash的序号,从0开始)指定恢复某一条。
如果只是想切换回之前的分支(不需要恢复stash内容),直接用git checkout <原分支名>或git switch <原分支名>即可。
2. 恢复stash内容到新分支(并找回误删分支的提交)
先梳理你的操作逻辑:你在myBranch上完成提交后执行git stash(若此时工作区无新修改,stash内容为空),接着删除了分支。提交内容丢失大概率是因为删除了未合并的myBranch,导致提交变成悬空提交,而非stash的问题。以下是完整解决步骤:
步骤1:找回被删除分支的提交
- 执行
git reflog,查看所有本地操作记录,找到你在myBranch上那次提交的哈希值(格式类似abc123)。 - 基于该提交重新创建分支:
这样就能恢复之前在git checkout -b myBranch <提交哈希值>myBranch上的提交内容。
步骤2:恢复stash中的内容(如果确实有暂存的修改)
如果确认stash中有需要恢复的内容:
- 切换到新创建的
myBranch:git checkout myBranch - 应用stash:
- 恢复并删除stash记录:
git stash pop - 恢复且保留stash记录:
git stash apply
- 恢复并删除stash记录:
如果你确实要将stash内容恢复到基于dev的新分支,你之前尝试的命令是可行的,但需要确保stash中存在有效内容:
git checkout -b myBranch dev git stash pop
如果执行后没有看到内容,说明当时执行git stash时工作区是干净的,并未暂存任何修改。
内容的提问来源于stack exchange,提问作者Alip Setiawan
相关产品推荐
相关产品推荐

