我尝试了来自git reset --hard HEAD@{n}
的{{1}},但我使用当前未暂存的文件丢失了所有内容:'(
非分页文件是我做过的最后一次git reflog
,之后我尝试git add
到最后git reset
。
我的所有文件都已消失,我无法在上次提交之前返回git commit
:'(
答案 0 :(得分:14)
目前尚不清楚您是否丢失了工作目录中的文件或文件 指数。你说你丢失了“未分级文件”,但是你提到了 你可能已经运行了“git add”。 “未分级文件”已经丢失了。
可以使用
恢复分阶段文件git fsck --full --unreachable --no-reflog
对于添加的每个文件,将会有丢失的blob对象,并且每个文件都有 目录条目会有一个树对象。你会恢复你的 文件更改
git cat-file -p SHA
对于您修改过的每个文件
(master)$ vi bar
(master)$ vi baz
(master)$ vi foo
(master)$ git add foo bar baz
(master)$ git reset --hard HEAD
HEAD is now at ead8fa2 initial
(master)$ git fsck --full --unreachable --no-reflog
Checking object directories: 100% (256/256), done.
unreachable blob 0c29287001b29159f11c4e8a320bce7e9789c00b
unreachable blob 1524d3478e3d0b92866a53239b10bcd4b3838c4d
unreachable blob 97b724e770249816c61d8a526415986208ed7e15
// take a look at one of the objects
(master)git cat-file -p 0c29287001b29159f11c4e8a320bce7e9789c00b
changes for bar
//Here, based on inspecting the output, I can determine that 0c29287 was the file "bar"
(master) git cat-file -p 0c29287 > bar
(注意我测试时没有丢失任何树木,所以这部分可能不起作用)
如果您修改了一大堆文件,则可能更容易恢复 通过树对象而不是单个文件
git read-tree SHA
其中SHA是根树的丢失树对象。
答案 1 :(得分:3)
所有未暂停/未提交的文件将被git reset - hard
删除不建议使用--hard,因为该选项删除所有未暂停/未提交的文件,而应首先隐藏,然后使用正常重置
而不是
git reset --hard HEAD@{n}
你应该做
git stash
git reset HEAD@{n}
然后您的代码将保存在存储堆栈中,您可以通过执行
再次检索它git stash pop
虽然这个命令合并了" stashed"建议在生成这些存储的相同提交中进行存储检索,以及使用当前HEAD(存储像分支一样实施)的更改
答案 2 :(得分:2)
如果在添加非暂存文件之前有人像我git reset --hard
那样犯了同样的错误,那么仍然有机会重新获得这些更改。虽然这些文件在repo中不再可用,但是一些新的IDE保留了它们自己的历史记录。就像在我的情况下,我能够从位于VCS下的 Android Studio的本地历史记录功能中检索我的未分级更改。
路线:强>
答案 3 :(得分:1)
如果您已使用git add
暂存文件,则仍可以找回它。但如果文件没有上演,我不得不说没有办法。 :(
请记住,git reset
确实不安全,尤其是对于未停止的文件。
但是如果文件真的非常重要,我能想到的是你可能会停止修改磁盘中的任何数据,并尝试使用finaldata
等工具进行磁盘恢复。如果幸运的话,它可能会找回一些东西,因为你已经在git reset
之后覆盖了一些文件。
无论如何,如果你熟悉它,Git
真的是一个强大而又酷的工具。
答案 4 :(得分:1)
低技术提示可能对某些人有用。如果您丢失了未分段/未分配的文件,则在编辑器中打开。尝试对该文件执行撤消操作,您应该获得以前的版本"来自编辑器历史堆栈的文件。
答案 5 :(得分:0)
类似于UsamaAmjad和Juank的答案。
如果您使用了足够好的IDE /编辑器:
注意:
答案 6 :(得分:0)
如果有人使用Pycharm IDE搜索解决方案,
然后找到您删除的文件,右键单击它并选择“还原”,然后已删除的文件将出现在文件夹中。