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

moc*_*dwi 10 git add reset head reflog

我试图git reset --hard HEAD@{n}git reflog我失去了一切,我目前不分阶段的文件:'(

未分阶段的文件是git add我做的最后一次,之后我尝试git reset了最后一次git commit.

我的所有文件都没了,我不能回到git add最后一次提交之前:'(

And*_*w C 19

目前尚不清楚您是否丢失了工作目录中的文件或索引中的文件.你说你丢失了"未分级文件",但是你提到你可能已经运行了"git add"."未分级文件"永远丢失了.

可以使用恢复分段文件

git fsck --full --unreachable --no-reflog
Run Code Online (Sandbox Code Playgroud)

对于添加的每个文件,将存在丢失的blob对象,并且对于每个目录条目,将存在树对象.您可以通过执行来恢复文件更改

git cat-file -p SHA
Run Code Online (Sandbox Code Playgroud)

对于您修改过的每个文件

(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
Run Code Online (Sandbox Code Playgroud)

其中SHA是根树的丢失树对象.


Usa*_*jad 10

如果有人在添加未暂存的文件之前犯了像我一样的错误git reset --hard,那么仍然有机会恢复这些更改。尽管这些文件在存储库中不再可用,但一些新的 IDE 保留了自己的历史记录。就像我的例子一样,我能够从Android Studio 的本地历史记录功能(位于 VCS 下)检索未暂存的更改。

路线:

步骤1

第2步


dse*_*ara 6

所有未暂存/未提交的文件将通过git reset --hard删除

使用--hard不是因为该选项recomended 中移除了所有未分级/未提交的文件,而不是你应该藏起来,然后再使用正常复位

代替

git reset --hard HEAD@{n}
Run Code Online (Sandbox Code Playgroud)

你应该做

git stash
git reset HEAD@{n}
Run Code Online (Sandbox Code Playgroud)

然后将您的代码保存在存储堆栈中,您可以通过执行以下操作再次检索它

git stash pop
Run Code Online (Sandbox Code Playgroud)

尽管此命令将“隐藏的”更改与当前的HEAD合并(建议使用一个分支来实现隐藏),但要在生成这些隐藏的相同提交上进行隐藏检索

  • “永远不要使用--hard”,这是**Scott Chacon** 的话,根据我的个人经验,每次有人使用“--hard”时,它都会变成“哦,废话,我又需要我的代码了:(” (2认同)

Jua*_*ank 5

可能对某些人有用的低技术提示。如果您丢失了未暂存/未提交的文件,请在您的编辑器中打开。尝试对该文件进行撤消,您应该从编辑器历史堆栈中获得该文件的“先前版本”。