我不小心输入了git checkout -f
,因为我试图恢复已删除的文件,但现在所有未提交的文件都已消失了......那是工作日...是否有办法将其恢复?感谢。
答案 0 :(得分:2)
您是否有跟踪文件修改的备份系统?你可以从那里取回它。否则你运气不好 - 经常提交!
答案 1 :(得分:2)
你在Dante's Inferno外面有一个滚雪球的机会,但这取决于一个 非常重要的 一步。
git add
。否则,您 不 会有一段美好时光。
如果有,则可以运行git fsck --lost-found
来恢复您已删除的所有文件。你得到的不是确切的文件名,而是一个悬挂的提交blob。
makoto@LATLON-Undefined:~/Desktop/smoketest$ echo "Goodbye file" > badfile.txt
makoto@LATLON-Undefined:~/Desktop/smoketest$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
badfile.txt
nothing added to commit but untracked files present (use "git add" to track)
makoto@LATLON-Undefined:~/Desktop/smoketest$ git add .
makoto@LATLON-Undefined:~/Desktop/smoketest$ git reset --hard HEAD
HEAD is now at 7124f25 Initial
makoto@LATLON-Undefined:~/Desktop/smoketest$ git status
On branch master
nothing to commit, working directory clean
makoto@LATLON-Undefined:~/Desktop/smoketest$ git fsck --lost-found
Checking object directories: 100% (256/256), done.
dangling blob 4a503984f4847abd45f4d795d1b74c6482164dcb
这些blob都没有附加任何文件信息;即,它们是什么文件名。但他们仍然是您的数据。
根据您掌握的内容,您可以执行以下两项操作之一:
在this site的引用中,您可以尝试使用他们的Bash脚本来拉入所有悬空blob并将它们放入当前目录中,并将其哈希作为文件名。
我还没有亲自测试过这个剧本,但他确实展示了一个有效的视频。
for blob in $(git fsck --lost-found | awk '$2 == "blob" { print $3 }');
do git cat-file -p $blob > $blob.txt;
done
答案 2 :(得分:0)
两个选项:
检查git stash以查看您之前是否隐藏了这些文件:
git stash list
git stash show stash@{0}
如果您之前添加/暂存了这些文件,则可以尝试git fsck --lost-found
。 Git会将所有悬空blob保存到./git/lost-found/other
目录(尽管它们没有原始文件名)。