我使用的命令:
git add .
(添加后,我将它们全部重置)git reset .
git checkout .
在我检出它们之后,我意识到我需要它们。有没有办法恢复更改?
--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/
目录中。
是的,如果您已经暂存了更改,那么您绝对可以找回您的文件。当您运行git add
时,文件实际上被添加到Git的对象数据库中。在您这样做的时候,git会将文件放入索引中:
% git add bar.txt
% git ls-files --stage
100644 ce013625030ba8dba906f756967f9e9ca394464a 0 bar.txt
100644 6af0abcdfc7822d5f87315af1bb3367484ee3c0c 0 foo.txt
% 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
的信息。