我有一个很大的问题。昨天我误认为开发和生产终端并排开放并且运行
git add .
关于生产。这导致在公共/上传路径中暂存所有文件。我试过的时候
git status
它显示公共/上传中的所有文件都已暂存并准备提交。但是我从未做过这些改变,因为在制作中我不想要任何提交或推动。生产中的SSH密钥没有推送权限,只能克隆/拉取。
所以我运行这些命令强制从远程存储库中提取新代码
git fetch --all
git reset --hard origin/master
git pull origin master
但是现在我发现它删除了public / uploads路径中的所有文件以及它自己的目录。当我检查
git status
我看到了"您的分支机构与“原点/主人”是最新的。 &#34 ;.有没有办法如何从已删除的目录中恢复文件?这些文件非常重要......
答案 0 :(得分:1)
据我所知,git
即使在提交之前,也会在存储库中注册其参数文件。如果他们没有提交,那么他们将在以后进行垃圾收集。因此,如果您立即采取行动,应该有一种从存储库中恢复文件的方法。
尝试在存储库目录的根目录中运行以下bash脚本。它将创建一个新的子目录recovering_lost_files
,它将包含比HEAD提交更新的git对象(因此对应于git add
- 但未提交的文件)。不幸的是,文件的名称不会自动恢复。
<强> recover_lost_files 强>:
#!/usr/bin/env bash
headcommit="$(git log --format=format:%H)"
headcommitobject=".git/objects/${headcommit:0:2}/${headcommit:2}"
mkdir recovering_lost_files
find .git/objects/ -type f -newer "$headcommitobject"|while read -r path
do
obj="${path#.git/objects/}"
obj="${obj/\/}"
git cat-file -p $obj > recovering_lost_files/$obj
done