[英]How to restore files that were removed by git?
我是一个 git 菜鸟和 git 刚刚删除了一堆重要文件。 我如何让他们回来?
我在本地机器上有一个仓库。 要进入 git,我只需右键单击我的项目文件夹和 select “git bash here”。 这带来了我做所有 giting 的主人。
所以我对舞台进行了一些更改,我做到了:
git add .
这上演了一系列变化。 我注意到我不希望其中一些上演,所以我决定尝试取消上演所有内容。 我这样做了:
git reset --hard HEAD^
这基本上删除了我在上次提交时创建的一堆文件并跳转到之前的提交。
我如何取回这些文件? 如果我不能通过 git 做到这一点,还有其他方法吗?
我对我的原始建议持正确态度(请参阅编辑历史记录)。 作为忏悔,我已经找到了从 git 恢复丢失文件的最简单方法:
git fsck --lost-found
ls .git/lost-found/other
不幸的是,文件名丢失了,但内容应该都作为不同的文件存在。
听起来您想要旧的 HEAD(而不是 HEAD^),在这种情况下,您可以简单地查看该修订版。 使用git reflog
显示以前的 HEAD 并查找您想要的提交,然后查看它。
如果您想要在重置之前暂存的文件,请参阅其他答案。
我知道这是一个旧线程,但我必须在这里添加一些内容。
使用后
$ git fsck --cache --no-reflogs --lost-found --unreachable HEAD
我们得到了数千个文件的列表(就像对我来说一样),看起来不可能手动检查所有文件,所以我们可以过滤列表以仅以任何适合您的方式查找 blob 文件,在可能的情况下它是 Python我刚刚将 git fsck 的 output 从控制台复制到文件读取文件以获取行列表
with open("lost_files.txt") as file:
lost_files = file.readlines()
然后过滤以分离 blob 的
[line.split(' ')[-1].strip() for line in lost_files if "blob" in line]
result was the list of hashes Then go to console and declare a variable FILES and past here the list of hashes generated above FILES=('5c2d8667ef8abbd7e114d2f9b61ee840b034e56f'....... '6dad86cd9c7a80ff5c3cd1d3222d2f8228dc18cf') for it was near 5К files then just write控制台中的一个简单循环
for lost_file in "${FILES[@]}"; do git show $lost_file > lost/lost_file_$lost_file.txt; done
结果我在丢失的目录中得到了 5К 文件然后它需要简单地打开每个文件和 grep 数据你想要我这是下一个脚本(我在处理功能时尝试使用有意义的命名,所以我只需按关键字添加过滤器)
import os
lost_files_names = os.listdir("lost")
names = []
for file in lost_files_names:
with open(f"lost/{file}", "rb") as data:
temp = data.readlines()
for x in temp:
if b"my_keyword" in x:
names.append(file)
for x in set(names):
print(x)
Finlay 我有 10 个文件的 output 并设法在短时间内恢复愚蠢丢失的未提交代码(感谢上帝,我做了 git 添加)
不,与
git reset --hard HEAD^
更改将恢复到上次提交并永久丢失。
正如@tanascius 所提到的,您可以使用以下命令来恢复添加但未提交的文件。 此命令在控制台中打印对blob和树对象的 SHA-1 引用。
$ git fsck --cache --no-reflogs --lost-found --unreachable HEAD
blob对象正是您被git reset
命令丢失的文件。 使用以下命令恢复它(不幸的是,实际文件名丢失了):
$ git show "<SHA-1 REFERENCE TO THE BLOB OBJECT HERE>" > lost_file.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.