git reset --hard后,未分段的文件消失了

时间:2014-09-11 15:31:35

标签: git add reset head reflog

我尝试了来自git reset --hard HEAD@{n}的{​​{1}},但我使用当前未暂存的文件丢失了所有内容:'(

非分页文件是我做过的最后一次git reflog,之后我尝试git add到最后git reset

我的所有文件都已消失,我无法在上次提交之前返回git commit:'(

7 个答案:

答案 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的本地历史记录功能中检索我的未分级更改。

路线:

Step 1

Step 2

答案 3 :(得分:1)

如果您已使用git add暂存文件,则仍可以找回它。但如果文件没有上演,我不得不说没有办法。 :(

请记住,git reset确实不安全,尤其是对于未停止的文件。

但是如果文件真的非常重要,我能想到的是你可能会停止修改磁盘中的任何数据,并尝试使用finaldata等工具进行磁盘恢复。如果幸运的话,它可能会找回一些东西,因为你已经在git reset之后覆盖了一些文件。

无论如何,如果你熟悉它,Git真的是一个强大而又酷的工具。

答案 4 :(得分:1)

低技术提示可能对某些人有用。如果您丢失了未分段/未分配的文件,则在编辑器中打开。尝试对该文件执行撤消操作,您应该获得以前的版本"来自编辑器历史堆栈的文件。

答案 5 :(得分:0)

类似于UsamaAmjad和Juank的答案。

如果您使用了足够好的IDE /编辑器:

  • 在您修改过的每个文件上按Ctrl + Z,
  • 如果您像我一样幸运的话,您将看到一个弹出窗口,“撤消从磁盘重新加载”
  • 打“是”。

注意:

  • 这适用于我的未暂存文件
  • 我在PyCharm中做到了,因此它可能会在其他基于JetBrains / Idea的IDE中工作
  • 重置git时,可能需要打开IDE
  • 重置git时,可能需要在编辑器窗口中打开文件

答案 6 :(得分:0)

如果有人使用Pycharm IDE搜索解决方案,

  • 找到删除文件的文件夹,
  • 右键单击选择“显示历史”,
  • 在左侧面板中,您将看到该文件夹​​中的更改历史记录。

然后找到您删除的文件,右键单击它并选择“还原”,然后已删除的文件将出现在文件夹中。