在没有任何提交的情况下撤消git reset

时间:2018-01-30 09:31:13

标签: git reset git-reset

我最近想,就像我想的那样,在远程git存储库上更新我的代码。我没有意识到它还没有实现。我确实创建了一些错误,所以我想将分支重置为以前的状态。

正如您所料,我使用了git reset --hard

嗯,从那以后,一切(整个项目)都已经消失了;当然,除.gitignore个文件/文件夹外。我一直想知道,有什么办法可以解除这个吗?

我做的唯一步骤:

git add .
# Here I realized there is a bug in what I did
# I thought myself it would be better to undo that as it wasn't even something needed
git reset --hard 

此外,我想指出它可能不是任何问题的重复,因为其他人之前有过一些提交。这是一个全新的存储库,它已被“重置”。

1 个答案:

答案 0 :(得分:2)

您可以在添加文件的状态下恢复文件,但不包含文件名。使用git fsck,您将获得任何提交都未引用的文件列表。

$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (1/1), done.
dangling blob c7c49b553f1b8c3c8f7955780e5dfdb934ce26db
dangling tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
dangling blob 4f92ab465171608a2c713f2f5439143df2c8afc9
dangling blob 9c1216eb500c0fc2c55c263a9cf221f282c3cd7b

然后您可以使用git cat-file来获取文件内容:

for blob in `git fsck | grep 'dangling blob' | cut -d\  -f3` ; do git cat-file -p $blob > $blob ; done

或者您也可以使用git fsck --lost-found,将所有悬空物品放入.git/lost-found/