如何撤消git reset-难以恢复丢失的数据?

时间:2019-04-13 06:27:04

标签: git

我试图将源代码提交到github,这是我所做的:

  1. git add。
  2. git reset --hard

在第一步中,我将添加将要提交的文件。但是在那之后,我不想提交它,并搜索撤消添加文件的方法。因此,我尝试使用“ git reset --hard”。

结果是我的所有数据都被删除了。 反正有第二步撤消并恢复我的数据吗?

1 个答案:

答案 0 :(得分:2)

如果您还没有运行git gc,我有解决方案!

运行git add .时,它将为内容已修改的所有文件创建新对象。这些将显示在.git/objects/*/*中。

使用以下find命令查找对您的.git存储库的最新更改:

find .git -printf "%T@ %Tc %p\n" | grep git/objects/../ | sort -n | tail -100

您将看到这样的输出,它是按日期顺序添加到git“数据库”中的每个“ blob”:

1555137117.9174205020 Sat 13 Apr 2019 02:31:57 AM EDT .git/objects/27/0e06d22c74316a523a3d5faf1e525730f30063
1555137119.0064516220 Sat 13 Apr 2019 02:31:59 AM EDT .git/objects/d8/dee4a715c2064caee8662dd8ccf5dc612cb90c
1555137120.8755050290 Sat 13 Apr 2019 02:32:00 AM EDT .git/objects/00/02959bbbcd5a170ab04a32093ba8c5abca1089
1555137310.5479249430 Sat 13 Apr 2019 02:35:10 AM EDT .git/objects/c3/a6bbbb091403d18550cc729a98e90a643bfa66

现在,剩下的就是一次提取对象的内容,直到找到所需的内容:

采用.git/objects/c3/a6bbbb091403d18550cc729a98e90a643bfa66并通过将c3a6bbb...组合来从中提取对象ID。将此传递给git cat-file

git cat-file -p c3a6bbbb091403d18550cc729a98e90a643bfa66

可惜,您运行git add .时文件的内容将转储到您的终端! (使用bash重定向>将其写入文件)