Git:在推送之前本地删除后可能恢复文件?

时间:2017-09-06 09:24:47

标签: linux git ubuntu

我想通过删除每个JPG文件来“清理”我的git仓库,所以我输入了:

find . | xargs rm *.png
在git root中

,现在一切都被删除。我的* .py文件也被删除了,但我不知道为什么?它是一台Linux,Ubuntu机器。有没有机会恢复我的文件?也许在我的操作系统上?

2 个答案:

答案 0 :(得分:4)

您输入的命令是完全错误的:

find .

此命令输出.下面的每个文件和目录的名称,包括隐藏文件。

xargs

此命令接受其输入并运行作为其参数给出的命令,一次作为参数提供一行。因此,它将运行rm *.png <line1_from_find>,然后rm *.png <line2_from_find>等等。

没有像错误停止那样的安全措施,所以如果让命令完全运行,它会解除所有文件的链接,并且你知道有一个空的目录树。并且git对您没有帮助,因为它的工作原理是将其元数据和当前状态存储在工作目录根目录的.git目录中。你刚刚删除了所有文件。

所以不,除非你手动或通过推送你的状态到其他地方制作副本,它可能已经消失,但见下文。为了将来参考,以下是销毁以png结尾的所有文件的正确命令:

find . -name '*.png' -delete

如果您的目录可能以-type f结尾,则可以在-delete之前添加.png,以便将其过滤掉。

<小时/> 好的,现在:恰好git将其内部状态标记为只读,如果您没有使用rm rm -f,那么.git就可以恢复某些内部状态来自那里的数据。转到工作目录根目录下的objects目录。它将包含一个zlib-flate -uncompress <path_to_the_file 目录,并且某些文件可能在那里存活。

这些文件是原始压缩流,您可以使用该命令查看其内容:

diff: /Podfile.lock: No such file or directory
diff: /Manifest.lock: No such file or directory
error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.

(zlib-flate命令来自ubuntu上的qpdf包)

答案 1 :(得分:0)

对我来说以下有效:

$ git checkout -- name_of_deleted_directory

$ git checkout -- path_to_local_delected_directory

就我而言,我错误地删除了一个目录,我没有更改该目录中的任何代码,但是我更改了 git repo 其他目录中的代码。