试了一下,这个回答 里面的方法可以做到。如果你还能找到被你 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 3ee9d39dfb246e78d0cd74df73700abc3dfd26cerecovery - How do I recover a dropped stash in Git? - Stack Overflow
试了一下,这个回答 里面的方法可以做到。
如果你还能找到被你 drop 掉的那个 commit id ,你可以直接使用
git stash apply <commit id>
来找回来。如果你找不到那个 commit id,可以在 git-bash 里面执行
或者在 Powershell 里面执行
根据拿到的 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>
来查看这个内容。