git stash问题?

我不小心把一条stash的记录给drop删除掉,我该怎么恢复这条记录?不记得id是多少。

阅读 2.7k
1 个回答

试了一下,这个回答 里面的方法可以做到。

如果你还能找到被你 drop 掉的那个 commit id ,你可以直接使用 git stash apply <commit id> 来找回来。

如果你找不到那个 commit id,可以在 git-bash 里面执行

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

或者在 Powershell 里面执行

git fsck --no-reflog | select-string 'dangling commit' | foreach { $_.ToString().Split(" ")[2] }

根据拿到的 commit id ,然后执行前面的的 git stash apply <commit id> 就行了。


我是在 Powershell 下运行的,可以看到 drop 后 reflog 是没有记录的,但是 drop 后会显示那个 commit ID (3ee9d39dfb246e78d0cd74df73700abc3dfd26ce) 在后面。如果你的窗口还没关,那可以直接用这个 commit ID 执行 apply 就行了,如果你已经关闭了,就按照后面的步骤来就好了。

我这里执行 git fsck --no-reflog | select-string 'dangling commit' | foreach { $_.ToString().Split(" ")[2] } 有多个 commit ID 那是因为我前面测试的记录,最后删除的那个在最下面。

当然,你还可以在 apply 之前使用 git show <commit> 来查看这个内容。

$ git stash -m test1
Saved working directory and index state On dev-20230726: test1

$ git stash list
stash@{0}: On dev-20230726: test1

$ git stash drop 0
Dropped refs/stash@{0} (3ee9d39dfb246e78d0cd74df73700abc3dfd26ce)

$ git reflog
e967789 (HEAD -> dev-20230726, origin/dev-20230726) HEAD@{0}: reset: moving to HEAD
e967789 (HEAD -> dev-20230726, origin/dev-20230726) HEAD@{1}: reset: moving to HEAD

$ git fsck --no-reflog | select-string 'dangling commit' | foreach { $_.ToString().Split(" ")[2] }
Checking object directories: 100% (256/256), done.
Checking objects: 100% (11568/11568), done.
05c24e1aac36af540983f41ca93742cf1d65bb42
3ee9d39dfb246e78d0cd74df73700abc3dfd26ce

$ git stash apply 3ee9d39dfb246e78d0cd74df73700abc3dfd26ce
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题