我想在推送之前通过删除每个 JPG 文件来“清理”我的 git 存储库,所以我输入了:
find . | xargs rm *.png
在 git root 中,现在一切都被删除了。我的 *.py 文件也被删除了,但我不知道为什么?它是一台 Linux、Ubuntu 机器。有机会恢复我的文件吗?也许在我的操作系统上?
最佳答案
您输入的命令完全错误:
find .
此命令输出.
下面的每个文件和目录的名称,包括 stash 文件。
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
(zlib-flate命令来自ubuntu上的qpdf包)
关于linux - Git:在推送前本地删除后可以恢复文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46071467/