繁体   English   中英

如何在 git 上首次提交之前取消删除文件?

[英]How to unremove files before first commit on git?

我不小心做了一个

git rm filename.txt -f

我删除了所有文件,认为它只会从提交中删除它们,现在需要恢复它们。 有没有办法或者他们永远失去了?

你的问题的标题似乎表明你的回购没有提交。

在这种情况下:

  • 不幸的是,如果filename.txt上的某些更改没有上演(例如:没有出现在最后的git add filename.txt ), git没有该文件的副本,您将不得不查看从磁盘取回该文件的其他工具(几个 IDE 保留文件的本地历史记录,或者您可以运行磁盘恢复工具)
  • 但是,上演的版本(当您上次运行git add filename.txt时)仍然存在于git的数据库中

例如,请参阅此答案,了解从 git 的存储中取回一些数据的一种可能方法:

#!/bin/sh

git fsck --no-reflogs --unreachable |\
    grep blob |\
    cut -d' ' -f3 |\
    sed -e 's|^\(..\)\(.*\)|.git/objects/\1/\2|' |\
    xargs ls -l -t 2> /dev/null

这应该会给你一个哈希列表,其中一个哈希应该是你文件的内容。 该列表将按“最近的第一个”顺序排序,因此如果运气好的话,您的最后一个文件将列在第一个文件中。

您可以运行git show {hash}查看 hash 和git show {hash} > back-from-the-dead.txt的文件内容。

尝试

git reset head ~

如果你上演了你的提交,你可以恢复它,否则它可能永远死了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM