如何恢复我已暂存但未提交的文件?

4

我使用的命令:

  1. git add .(添加后,我将它们全部重置)
  2. git reset .
  3. git checkout .

在我检出它们之后,我意识到我需要它们。有没有办法恢复更改?


请查看 https://dev59.com/3Ww05IYBdhLWcg3wmC0o 和 https://dev59.com/VWgu5IYBdhLWcg3wxZpL,这是可能的。 - Chris
2个回答

4
如果您说的那样,您的文件可能会被分阶段地获取,可以使用带有 --lost-found 选项的 git fsck 命令来实现。
如果您运行 git fsck --lost-found ,您将看到类似以下内容(可能会有更多悬挂blob行):
Checking object directories: 100% (256/256), done.
dangling blob 84eab6f56e81cebe1356c9c2a6e2882c05f5fc01

这些悬空的blob可能就是你丢失的文件。

如果你运行git show <悬空blob的SHA值>,你将能够看到该文件的内容,但很遗憾文件名可能已经丢失。

然而,你可以将输出内容复制回适当的文件。或者,在运行git fsck --lost-found后,这些悬空的blob会保存到你的代码库根目录下的.git/lost-found/other/目录中。


0

是的,如果您已经暂存了更改,那么您绝对可以找回您的文件。当您运行git add时,文件实际上被添加到Git的对象数据库中。在您这样做的时候,git会将文件放入索引中:

% git add bar.txt
% git ls-files --stage
100644 ce013625030ba8dba906f756967f9e9ca394464a 0   bar.txt
100644 6af0abcdfc7822d5f87315af1bb3367484ee3c0c 0   foo.txt

请注意 bar.txt 的条目包含文件的对象 ID。Git 已将该文件添加到其对象数据库中。在这种情况下,Git 将其作为松散对象添加到了仓库中:
% ls -Flas .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
4 -r--r--r--  1 ethomson  staff  21 14 Jun 23:58 .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a

这些文件最终将被垃圾回收。但这将在几个月而不是几天内发生。在这些文件被垃圾回收之前,您可以恢复它们。

最简单的方法是以交互模式下载并安装git-recover程序

% git recover -i
Recoverable orphaned git blobs:

61c2562a7b851b69596f0bcad1d8f54c400be977  (Thu 15 Jun 2017 12:20:22 CEST)
> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
> tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
> veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
> commodo consequat. Duis aute irure dolor in reprehenderit in voluptate

Recover this file? [y,n,v,f,q,?]: 

git-recover 查找对象数据库中未提交(或在索引中)的文件。您可以在宣布它的博客文章中了解更多关于git-recover的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接