我有一个已存在的Java项目,我做了以下操作:
cd existing_folder
git init
git remote add origin URL
git add .
git reset --hard
我不小心执行了git reset --hard,有没有办法恢复我的数据?
这将删除我项目中的所有目录和文件。
我有一个已存在的Java项目,我做了以下操作:
cd existing_folder
git init
git remote add origin URL
git add .
git reset --hard
我不小心执行了git reset --hard,有没有办法恢复我的数据?
这将删除我项目中的所有目录和文件。
请参考在添加文件(未提交)时重置git后恢复文件。这里有一个小技巧:不要只是:
git fsck
打印一堆“悬挂的 blob”信息,你必须像其被接受的答案所示保存并检查,使用:
git fsck --lost-found
dangling blob *hash
,而是会将“悬空的 blob”文件的内容提取到 .git/lost-found/other
目录下。提取后的文件名将是 blob hash ID。内容可能是你使用 git add .
添加的文件之一,也可能是其他早期操作留下的未使用的内容。(在这种情况下,由于 Git 存储库本身是新的,不应该有这样的文件。)git reset
重新设置,并且不再具有文件的正确名称。如果您可以手动从内容映射回文件名,则可以将文件从 .git/lost-found/other
目录移动或复制到最初的任何名称下。
当你完成后,可以删除.git/lost-found/commits
中的内容(如果有),以及.git/lost-found/other
中剩余的任何内容。在你的情况下,.git/lost-found/commits
中应该没有任何东西。
只有一种方法可以找到添加到索引中的文件内容:
find .git/objects -type f | sed 's/.git\/objects\///g' | sed 's/\///g' | xargs -n 1 git cat-file -p
希望这能有所帮助!你可以在官方文档中找到关于Git对象的额外文档。
git reset HEAD@{0}
git reflog show
命令来列出索引。git reflog show
a
。93567ad HEAD@{0}: reset: moving to HEAD@{6}
203e84e HEAD@{1}: reset: moving to HEAD@{1}
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug
更详细的信息 如何从 git reset --hard 恢复?
此外,您可以使用 git fsck --lost-found
将对象写入 .git/lost-found/
中。在那里,您可以使用 git show <filename>
查看每个文件的内容。
git reset --hard
命令将工作区重置到最后一次提交。不幸的是,Git 中没有撤销此操作的方法,因此除非您有其他形式的备份,否则就无法恢复了。