Git中添加但未提交的已删除文件可以恢复吗? [复制]

Posted

技术标签:

【中文标题】Git中添加但未提交的已删除文件可以恢复吗? [复制]【英文标题】:Can deleted files that are added but not committed in Git be recovered? [duplicate] 【发布时间】:2012-09-08 05:09:20 【问题描述】:

我是 git 新手,我犯了一个愚蠢的错误,我通过“rm *”命令删除了一些重要文件。但是,我确实使用“git add”来添加这些文件,但没有提交。删除尚未添加。那么有什么方法可以恢复这些已删除的文件。

任何建议或答案将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

由于文件已经在您的暂存区(索引)中,只需使用git commit 提交它们,无需任何参数。无论工作树的当前状态如何,这都会提交索引的内容。

然后您可以使用git reset --hard(如果您在要保留的树中没有其他更改)或git checkout FILE1 FILE2... 将丢失的文件恢复到您的工作树中。

【讨论】:

【参考方案2】:

您可以使用git fsck --lost-found 查找所有不再引用的对象。您需要查看“blob”对象并查看它们是否与您删除的文件匹配。希望您周围没有很多未引用的对象。


正如用户 4815162342 所指出的,发帖者实际上表示尚未添加删除,这意味着可以使用 git checkout 检索它们,或者只是现在提交以确保它们不会消失。

我将保留我的答案,以防其他人想要git fsck --lost-found 的信息,但应该接受 user4815162342 的答案。

【讨论】:

您好,感谢您的回复。我跑的命令,看见晃来晃去斑点像这样的列表,然后我怎么被删除的文件备份?晃来晃去的blob 029530a4ebc7dec791a58cb022e18d0d87c8fe04晃来晃去斑点0c871fff49c4a05ff4a49b6a910f3bc4b688e338悬挂一滴0c08f1e149bfa9e84e9e30867c931423267b91c7 SPAN> git fsck --lost-found 将所有悬空对象写入.git/lost-found/commit/.git/lost-found/other/ 文件夹。查看other 文件夹并尝试在其中找到包含您删除的文件的文件。名称将是 SHA1 哈希,但内容将是实际文件。 您也可以通过git cat-file -p SHA1打印单个对象

以上是关于Git中添加但未提交的已删除文件可以恢复吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

忽略git中修改(但未提交)的文件?

我可以恢复我没有在本地保存的已删除 git 分支吗?

git restore 删除后未提交的已删除文件

即使我在提交之前 git 添加了所有文件,我可以恢复到只有一个文件的先前版本吗?

Git:恢复一个已经在提交中被删除的文件

git checkout 不会删除新添加的文件