“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 吗?

相关内容