2017-09-06 96 views
1

我想通过删除所有的JPG文件推前“干净”我的git仓库,所以我进入:Git:在推送前本地删除后恢复文件可能吗?

find . | xargs rm *.png 

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

+0

这是什么混帐'输出status' ? – smarber

+0

“致命的:不是它的存储库(或任何父目录):.git” –

回答

4

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

find . 

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

xargs 

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

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

所以不,除非您手动或通过推送您的状态到其他地方复制它,否则它可能已经消失,但请参阅下文。对于未来的参考,下面是正确的命令摧毁PNG结尾的文件:

find . -name '*.png' -delete 

-delete前Optionnaly添加-type f如果你可以在.png结束目录,将它们过滤出来。


好了,现在是什么:它发生 git标志着它的一些内部状态的作为,这 rm荣誉,如果你没有使用 rm -f,你也许能够从恢复一些数据只读。转至工作目录根目录下的 .git目录。它将包含一个 objects目录,并且有些文件可能在那里存活。

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

zlib-flate -uncompress <path_to_the_file 

(zlib的-flate命令来自qpdf软件包在Ubuntu)

+0

感谢您的解释。通过zlib-flate恢复是不可能的,因为.git是完全空的。 –

+1

@ N8_Coder>我感到你的痛苦。作为最后的手段,您可以尝试解决askubuntu上的问题,例如[如何恢复已删除的文件](https://askubuntu.com/questions/3883/how-to-recover-deleted-files)。交叉手指,并希望最好的,那些工具总是有一些运气。 – spectras

+0

感谢您的链接! –