Git restore deleted files - bad default revision 'HEAD'
我刚开始使用Git。我运行命令:
1 | git init |
然后我做到了:
1 | git add app/controllers/* |
(添加所有控制器。)
然后我决定移除这些,所以我尝试:
1 | git rm app/controllers/* |
这给了我一个错误,说有一些未保存的更改或什么,所以我不得不使用
现在,我过去几周一直在使用的所有控制器都被删除,我不知道如何将它们恢复。不幸的是,我没有其他备份,我知道这是非常愚蠢的。
我试着在谷歌上搜索。它有一些命令我试图运行,但无论我键入什么,它都会说:
bad default revision 'HEAD'.
任何帮助恢复过去几周的工作都会非常感谢!
假定您自最初的错误以来没有执行任何永久破坏性命令,那么您应该能够恢复文件。
但是,您无法恢复的是文件名。Git将存储内容,但不存储路径/名称。
因此,使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | me@myvm:/scratch $ mkdir rmtest me@myvm:/scratch $ cd rmtest me@myvm:/scratch/rmtest $ mkdir app me@myvm:/scratch/rmtest $ cd app me@myvm:/scratch/rmtest/app $ mkdir controllers me@myvm:/scratch/rmtest/app $ cd controllers me@myvm:/scratch/rmtest/app/controllers $ echo"2 weeks worth of work"> foo me@myvm:/scratch/rmtest/app/controllers $ cd ../../ me@myvm:/scratch/rmtest $ git init Initialized empty Git repository in /scratch/rmtest/.git/ me@myvm:/scratch/rmtest (master)$ git add app/controllers/* me@myvm:/scratch/rmtest (master)$ git rm app/controllers/* error: the following file has changes staged in the index: app/controllers/foo (use --cached to keep the file, or -f to force removal) me@myvm:/scratch/rmtest (master)$ git rm -f app/controllers/* rm 'app/controllers/foo' me@myvm:/scratch/rmtest (master)$ ll total 0 me@myvm:/scratch/rmtest (master)$ git fsck notice: HEAD points to an unborn branch (master) Checking object directories: 100% (256/256), done. notice: No default references dangling blob f9a0e5002ae9f9a854ecf50560c40b3b0a7ec7bc me@myvm:/scratch/rmtest (master)$ git cat-file -p f9a0e5002ae9f9a854ecf50560c40b3b0a7ec7bc 2 weeks worth of work |
但是,您确实将它们添加到索引中了一次,因此存储库中确实有它们的blob(假设您最近才这样做)。一个低级的解决方案是进入
1 2 3 4 5 6 7 8 9 10 11 | {GIT_DIR!}% pwd /tmp/bar/.git/objects {GIT_DIR!}% tree . . ├── 85 │ └── bfe46bc8180ef0f145d8abf946879a524df4a8 ├── info └── pack 3 directories, 1 file {GIT_DIR!}% |
现在您可以执行类似于
我以前说过这一点。Git对用户不太友好。它是一个电动工具,所以在开始使用之前详细阅读文档是非常明智的。