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 嗎?