使用 git -r rm 后如何恢复我的 git 存储库

How do i restore my git repository after using git -r rm

我正在研究我的存储库,在修改了我使用的一些文件之后:

git add .

这个输出是:

 Changes to be commited:
      new file:   path/to/file.txt
      modified:   path/to/file2.txt

 Changes not staged for commit:
      deleted:     path/to/file/file3.txt

所以我用了:

 git commit -m 'add and modify file and file2'

给出了输出:

 2 files changed, x insertions, x deletions

所以我做了 git status 输出:

 Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory

           deleted:
    no changes added to commit (use "git add" and or "git commit -a")

所以此时我做了:

git rm -r . 

因为我认为这会删除所有 'deleted' 文件 然而,这删除了我存储库中的所有内容

然后我做了:

git reset HEAD .

之后我做了 git 日志并找到了我最初在这个 post 中所做的提交的提交代码。这只是让我回到那个承诺之前。

我want/need是在第一次提交后取回所有文件'add and modify file and file2'

从这里可以吗?我不想再玩它了,因为我不想把它搞得更糟!谢谢

从 git 日志中,检查您要滚入的正确提交 ID(检查时间或提交次数以验证):

然后使用:

git reset --hard <tag/branch/commit id>

tl;博士

您使用 git reset HEAD 恢复文件的方向正确。只要你没有提交删除的文件,你可以简单地添加 --hard 选项来恢复你工作目录中的文件:

git reset --hard HEAD

git reset的三种模式

git reset 命令可以修改存储库中的三项内容:

  • HEAD参考
  • 指数
  • 工作目录

要修改的内容取决于您选择的操作模式:

  • --soft 仅修改 HEAD 引用
  • --mixed修改HEAD引用索引
  • --hard 修改 HEAD 引用、索引 工作目录

如果您在调用 git reset 时未指定这三个参数之一,则默认值为 --mixed。这意味着 Git 将移动 HEAD 引用并更新索引,但会保持您的工作目录不变。

在您的情况下,您希望将工作目录中的文件恢复到您最近一次提交时的状态(由 HEAD 引用),因此您需要传递 --hard 选项:

git reset --hard HEAD

您可以在优秀的博客 post Reset Demystified.

中阅读有关 git reset 工作原理的更多信息