linux - Git:在推送前本地删除后可以恢复文件吗?

标签 linux git ubuntu

我想在推送之前通过删除每个 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/

相关文章:

ruby-on-rails - Nginx 乘客不可见应用程序问题

c - 尝试读取 json 文件时出现段错误

java - 在舞台中替换场景后如何获取场景的正确位置?

linux - 使用 awk 过滤掉无法识别的字段

git - 按文件划分 Git 分支

git - 如何在git中用错误的作者重命名提交

c# - 在 ubuntu 下的 Mono 3.28 中使用通用队列

c# - .net 核心用于 ubuntu linux 流水线

linux - 自动登录 Linux 16.04

git - 如何远程触发 Jenkins 多分支管道项目构建?