“git rm”後恢復

“git rm”後恢復

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

相關內容