How to recover uncommitted changes to the working directory from a
git reset --hard HEAD?
You can try
git fsck --lost-found to see if your changes still in
$ git fsck --lost-found Checking object directories: 100% (256/256), done. Checking objects: 100% (54/54), done. dangling blob 15f9af8379f13672ca0e75d56df100edfd67fe6b dangling commit 18fc9548f20eb8938dde68ab4a3dd0b7a0212dc3 dangling commit 33a832866e3855e300504ea6b584732e9c3c286c dangling blob 568ca393d5e21cdc9eda2824111a5429a70d5113 dangling blob 89cdac4d3fc03546b5ab485aa8a9905b34702a4a dangling blob abf03d6c84484a2b096a4d7f0ee5a85361f8a3d6 <- it's this one dangling commit bc05be5eac21134b63ca51fbd20fee5c8782a640 dangling commit c0fa59cfaa0bad5f8ca8a1a845ba1673bb207b2d dangling commit d140d6f693d8ef83d040d483bec3db95db084cd9 dangling blob e9c3eb31aa0589ab59f46630f7926681f7a14476 <- it's this one
Then you will get a dangling blob by
git show e9c3eb31aa0589ab59f46630f7926681f7a14476
will give you the file content back of reset.
To find unreferenced commits I found a tip somewhere suggesting this.
gitk --all $(git log -g --pretty=format:%h)
I found them in the other directory within the
<path to repo>/.git/lost-found/. From there, I can see the uncommitted files, copy out the blobs, and rename them.
Note: This only works if you added the files you want to save to the index (using git add .). If the files weren’t in the index, they are lost.