some_dir_path
我用初始化了 git repo git init
。之后,我决定不将所有文件包含到 repo 中并发布git rm -f
.正如我所想,它会从 git repo 中删除所有文件,而不是从目录本身中删除。现在,some_dir_path
除了 .git 本身之外,这是空的:
ls -aR some_dir_path:
.git:
branches config description HEAD hooks index info objects refs
...
那么问题来了,有没有办法找回数据呢?
我之前没有发布任何提交,也没有git rm -f
可以从中恢复的分支。
答案1
由于没有提交任何文件,因此它们现在丢失了。
如果它们已被提交,您将通过发出来恢复
git reset --hard
这将恢复自上次提交以来删除的文件(并恢复对其他文件所做的任何更改)。
也可以看看git reset --help
。
答案2
尚未git rm
提交,因此过程非常简单:
起点:添加了一个“onefile”:
$ git cat-file -p HEAD:onefile
content...
$ cat onefile
content...
现在git rm
:
$ git rm -f onefile
rm 'onefile'
$ ls
文件真的没了。 git 命令未提交。 (该行rm 'onefile'
是输出,不是命令!)
此时此刻,建议很简单:不要惊慌,了解一下概述:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: onefile
因此,按照提示进行操作:
$ git reset HEAD *
Unstaged changes after reset:
D onefile
删除已从未提交变为未暂存。
$ git archive HEAD -o playback.tar
$ tar xf playback.tar --to-stdout
content...
如果git rm
已提交,则git reset HEAD~
需要 a。
如果 repo 在 just 之后是空的git init
,则该git rm
命令是“安全的”:
$ git rm *
fatal: pathspec '*' did not match any files
Q 隐藏了 init 和 rm 之间发生的事情。一定是 git add 吗?