如何撤消“ git rm -r -f * ”

2023-12-25

我第一次使用git, 我有一个目录,其中写有多个程序,并执行了以下步骤

  1. I did git add .
  2. then git commit,然后我收到一条消息Aborting commit due to empty commit message.
  3. 然后我想,让我在公共消息下提交一组文件。所以我想到删除所有添加的文件。
  4. 所以我做了git rm -r -f
  5. 当我做一个ls我丢失了所有代码。有什么办法可以让我把它们找回来吗?愚蠢的是我什至没有备份副本。

到目前为止我所遵循的事情

我用谷歌搜索了一些发现了一些命令,但它们不起作用

git stash如果我输入这个命令我得到

致命:错误的修订“HEAD” 致命:错误的修订“HEAD” 致命:需要一次修改 您还没有初始提交

git reset HEAD,如果我输入这个命令我得到

致命:不明确的参数“HEAD”:未知修订或路径不在 工作树。 使用“--”分隔路径和修订版本

我真的需要拿回那些文件!

我创建 GIT 所遵循的步骤

  1. mkdir BareRepo
  2. In BareRepo我做的目录git init, git status, git config --bool core.bare true
  3. 然后我克隆了 BareRepogit clone BareRepo/ Programs/
  4. In the Programs目录我做了上述所有事情

You may能够从中止的提交中恢复文件

基于@the-malkolm 的观察。

从问题中的信息来看,没有提交,并且文件在任何时候都没有被跟踪。因此 git 并不真正了解任何已删除的文件。

尽管如此,还是有希望的。仅仅因为您在删除文件之前尝试提交文件,所以会出现一个幻影提交,其中包含您的所有文件。

这是一个例子:

$ git init
Initialised empty Git repository in /tmp/so/.git/
$ echo "find this text" > README.md 
$ git add README.md 
$ git commit -v 
Aborting commit due to empty commit message.
$ git rm -rf .
rm 'README.md' 
$ git status
# On branch master
# 
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

上面模拟了问题中的事件,通常这就是重新开始重写代码的时候了。没有提交,文件就消失了。

识别中止的提交

然而检查.git存储库产生一些信息:

$ tree .git/objects/
.git/objects/
├── 91
│   └── 9cdf847a6af7c655c8de1d101385f47f33e0f9
├── d6
│   └── 7d51abe2521dcd00cec138b72f5605125c1e41
├── info
└── pack

尽管没有提交,但 git 存储库中仍有对象。需要确定两个对象中哪一个是tree http://git-scm.com/book/en/Git-Internals-Git-Objects#Tree-Objects:

$ git ls-tree 919cdf
fatal: not a tree object
$ git ls-tree d67d51
100644 blob 919cdf847a6af7c655c8de1d101385f47f33e0f9    README.md
$

第一个参考是blob http://git-scm.com/book/en/Git-Internals-Git-Objects代表 README.md 文件 - 存储库中每个文件都有一个 blob,本例中的第二个是树引用。

重新创建工作副本

一旦识别出树哈希,就可以使用它来重建索引读树 https://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html:

$ git read-tree d67d51abe2521dcd00cec138b72f5605125c1e41
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   README.md
#
# 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:    README.md
$

此时工作副本是空的但是丢失的文件被暂存以供提交.

提交它们:

$ git commit -m "phew"

并签出以匹配存储库的提交状态:

$ git checkout .
$ ls
README.md  

然后,所有文件都存在并已提交。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何撤消“ git rm -r -f * ” 的相关文章

随机推荐

  • 如何禁用按下按键时列表框自动选择项目

    我有一个列表框 我想在该列表框中复制并粘贴项目 复制和粘贴工作正常 但每次我按 Crtl C 时 都会自动选择以字母 C 开头的项目 可以禁用此自动选择还是我在这里遗漏了一些东西 这是我实现的复制粘贴方法 private void list
  • urllib2:读取 https url 失败

    此代码在我的 Ubuntu 上失败 但在其他主机上运行良好 gt gt gt from urllib2 import urlopen gt gt gt urlopen https courtapps utcourts gov Xchange
  • 客户端使用的数据库历史记录

    我试图找出在数据库上记录历史记录 跟踪已完成的任何插入 删除 更新的最佳方法是什么 历史数据需要编码到前端 因为它将被用户使用 创建 历史表 用于存储历史记录的每个表的副本 并不是一个好方法 因为数据分布在多个表中 此时 我最好的想法是创建
  • 在 Flash 中从中心缩放

    我正在使用 flash AS3 并且有一个动态影片剪辑 我想使用滑块放大或缩小该影片剪辑 我使用scaleX和scaleY函数使这个工作得很好 唯一的麻烦是这些从文档的左侧缩放 我希望它从中心缩放 任何帮助表示赞赏 function sca
  • JavaScript 文件在 ASP.NET Core 区域中的位置

    我正在创建一个 ASP NET Core 应用程序 其中包含多个区域 我应该在哪里添加特定于某个区域的 JavaScript 文件 通常我将它们放入 wwwroot js 文件夹中 某个区域有类似的东西吗 我应该在哪里添加 JavaScri
  • 使 Amazon S3 文件仅对登录用户可用

    如何使 Amazon S3 中的文件仅可供登录用户访问 我的网站使用 PHP 静态文件存储在 Amazon S3 中 只有登录到我的网站的用户才应该能够访问亚马逊云中的文件 是否可以 您可以使用应用程序根据用户登录生成的签名 URL htt
  • Python 在从函数返回时挂起

    假设我在一个相当复杂的 Flask 应用程序中有两个函数 一个函数调用另一个函数 def dispatch unlock stuff log dis start this routine just sends some data over
  • C++ TlHelp32.h 不工作?

    尽管我不断收到消息 但我已正确包含 TlHelp32 h 标头 错误 标识符 CreateToolhelp32Snapshot 未定义 尝试使用 CreateToolhelp32Snapshot 时 当我在 VS 中使用 查看定义 功能时
  • 如何在表格中间画一个圆以及如何找到圆心?

    using System using System Collections Generic using System ComponentModel using System Data using System Drawing using S
  • 如何最有效地移动、重命名文件并记录此操作?

    我有以下 CSV 列表 实际上有 1000 行 needle code 123456 AB 121212 BB 33333333 CVV 我有一个目录 C old files 包含 PDF 文件 实际上是 1000 个 dsadsadsa
  • 如何检测AngularJS点击时按下的按键

    I m using angularjs on a web application that I need to figure out how can I detect is keys like ctrl shift or alt are p
  • matlab中如何退出两个嵌套的for循环

    我有一个while我有两个循环for循环 我内心有一个条件for环形 每当这个条件满足时我想同时退出这两个for循环并继续while loop while 1 for x 1 20 for y 1 30 if condition end e
  • 在unix目录下的文件中快速搜索文本?

    有没有一个好的解决方案来执行类似的搜索 find name xargs grep some text 但由于离线索引 搜索速度要快得多 支持通配符或轻型正则表达式会很好 但即使是由于离线预处理而可以运行得非常快的原始文本搜索也很棒 我认为这
  • 如何在 Swift 中从 DNS 查询中获取真实的 IP 地址?

    我想从 Swift 中的 DNS 查询获取 IP 地址 如 192 168 0 1 或 87 12 56 50 我用 100 种不同的方法尝试了 100 次 没有任何帮助 所以我不得不寻求帮助 到目前为止 这是我的代码 let host C
  • 在没有 sudo 的情况下运行特权 podman(并且没有用户名空间)

    我在 RHEL 7 6 上安装了 podman 并且可以使用 sudo 运行正常的 docker 命令 sudo podman run hello world 有没有一种方法可以在不使用 sudo 的情况下运行它 而不使用用户名空间 类似于
  • 如果我打开 doc.foo 文件,我希望 emacs 在同一文件夹中查找并打开 doc.bar 文件

    具体来说 这个问题是在我使用 LaTeX auctex 时出现的 但我认为它必须有一个通用的 emacs 解决方案 对于每个 doc tex 文件 我在同一文件夹中都有一个关联且经常编辑的 doc sty 文件 有没有一种方法 每当我打开
  • 可选函数参数被指定为特征而不是具体类型

    过去几个月我一直在关注 Rust 但我刚刚开始一个实际的项目 我不确定标题中的术语是否正确 请让我知道如何纠正它 我正在围绕 ENet 库编写一个 Rust 包装器 http enet bespin org http enet bespin
  • Crashlytics 生成符号 gradle 步骤失败:超出 GC 开销限制

    我正在将项目从 gradle 版本 3 3 转换为 4 10 1 该项目主要是使用自定义构建步骤构建的 C 代码 而不是 CMake externalNativeBuild 或 Android mk ndkBuild 它生成以下库 arme
  • 与 malloc/free 相比,使用 C99 VLA 是一个好主意吗?

    使用 C99 VLA 是个好主意吗 与 malloc free 相比 什么时候使用 VLA 合适 因为 VLA 可能会炸毁堆栈 是的 除非你知道你的堆栈可能会爆炸 如果有必要 您还可以更改堆栈的大小 每个操作系统的情况有所不同 但这是可能的
  • 如何撤消“ git rm -r -f * ”

    我第一次使用git 我有一个目录 其中写有多个程序 并执行了以下步骤 I did git add then git commit 然后我收到一条消息Aborting commit due to empty commit message 然后