【问题标题】:Undo git reset --hard with uncommitted files使用未提交的文件撤消 git reset --hard
【发布时间】:2020-05-07 09:43:23
【问题描述】:

我有一个现有的 java 项目,我做了以下操作

cd existing_folder
git init
git remote add origin URL
git add .
git reset --hard

我不小心做了 git reset --hard 有什么办法可以恢复我的数据

就这样删除了我项目的所有目录和文件

【问题讨论】:

标签: git git-reset


【解决方案1】:

git reset --hard 将工作重置为最后一次提交。不幸的是,Git 没有办法撤消这个操作,所以除非你有其他形式的备份,否则你就不走运了。

【讨论】:

  • 如果文件不在索引中,那么它们就会丢失。
【解决方案2】:

只有找到添加到索引的文件内容的方法:

find .git/objects -type f | sed 's/.git\/objects\///g' | sed 's/\///g' | xargs -n 1 git cat-file -p

希望这会有所帮助! 您可以在 official docs 中找到有关 git 对象的其他文档

【讨论】:

  • 不确定谁反对这个答案,因为它应该可以工作(至少在类 Unix 系统上)。但是,它会将所有内容放在标准输出上的一个大流中。
【解决方案3】:

您可以尝试从索引对象中恢复。我想你正在寻找这个。

以前阶段性的更改(git add)应该可以从索引对象中恢复

git reset HEAD@{0}

您可以使用git reflog show 列出索引

git reflog show

输出会像一个

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

更多详情Recover from git reset --hard?

您也可以将对象写入.git/lost-found/git fsck --lost-found。在那里您可以使用git show <filename> 查看每个文件的内容。

【讨论】:

  • 实际上没有执行提交,所以此时 reflog 为空
【解决方案4】:

Recover files in git after reset --hard on added files(not committed!)。您可以使用一些捷径:而不仅仅是:

git fsck

它会打印一堆dangling blob 消息,您必须保存并检查它们,如accepted answer 所示,使用:

git fsck --lost-found

这一次,Git 不只是dangling blob *hash,而是将那个“悬空的blob”文件的内容提取.git/lost-found/other。提取文件的名称将是 blob 哈希 ID。 内容 将是您git addgit add . 编辑的文件之一,或者是一些其他早期操作遗留下来的内容,这些操作添加了内容但最终没有使用它。 (在这种情况下,由于 Git 存储库本身是新的,因此不应该有任何此类文件。)

不幸的是,文件的名称全部丢失:它们在索引中,但现在已通过git reset 重新设置索引并且不再具有文件的正确名称。如果您可以手动将内容映射回文件名,则可以移动或复制 .git/lost-found/other 目录中的文件,使其以原来的任何名称存在。

(全部完成后,您可以删除.git/lost-found/commits 的内容(如果有)以及.git/lost-found/other 中剩余的任何内容。在您的情况下,.git/lost-found/commits 中应该没有任何内容。)

【讨论】:

    猜你喜欢
    • 2020-11-16
    • 2018-05-30
    • 2015-09-15
    • 1970-01-01
    • 2010-09-05
    • 2015-01-10
    相关资源
    最近更新 更多