如何恢复我的暂存文件但没有提交?

时间:2017-08-03 12:36:12

标签: git github

使用的命令: 1. git add。 (添加后我重置所有) 2. git reset。 3. git checkout。

在我检查完所有内容后,我需要它们。有没有办法让变化回来?

2 个答案:

答案 0 :(得分:3)

如果您的文件按照您说的那样暂存,您可以使用带有git fsck选项的--lost-found命令将其恢复。

如果你运行git fsck --lost-found,你会看到类似这样的东西(可能有更多悬空的blob线):

Checking object directories: 100% (256/256), done.
dangling blob 84eab6f56e81cebe1356c9c2a6e2882c05f5fc01

这些悬空斑点中的一些可能是你丢失的文件。

如果您运行git show <SHA of a dangling blob>,您将能够看到该文件的内容,遗憾的是文件名可能已丢失。

但是,您可以将输出复制回相应的文件中。或者,在运行git fsck --lost-found之后,悬空blob将保存到存储库根目录中的.git/lost-found/other/目录。

答案 1 :(得分:0)

是的,如果你已经进行了更改,那么你绝对可以恢复你的文件。运行ucode_str时,文件实际上已添加到Git的对象数据库中。在你做的那一刻,git会把文件放在索引中:

git add

请注意,bar.txt的条目包含文件的对象ID。 Git实际上已将文件添加到其对象数据库中。在这种情况下,Git将它作为一个松散的对象添加到存储库中:

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

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

最简单的方法是在交互模式下download and install the git-recover program

% ls -Flas .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
4 -r--r--r--  1 ethomson  staff  21 14 Jun 23:58 .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a

% 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,?]: 在对象数据库中查找已提交(或在索引中)的文件。您可以在the blog post announcing it中找到有关git-recover的更多信息。