如何在推送后在git中恢复意外删除的文件和文件夹。以下是情景。
现在,我可以将已删除的文件与历史记录一起恢复,然后再回到repo。
答案 0 :(得分:8)
当然,只需从存在的提交中查看它。如果删除文件的提交是您当前检出的任何提示,那就是HEAD^
(最后提交):
git checkout HEAD^ -- path/to/file
然后你可以提交并推送它。
答案 1 :(得分:1)
假设您当前在主分支上,一个简单的解决方案是找到上次提交的GIT SHA1(使用类似gitk帮助的东西)和所需的已删除文件。
运行命令
git checkout <GIT SHA1 value>
将文件内容复制到记事本(或任何文本编辑器)
运行命令
git checkout master
使用记事本
中的内容重新创建文件答案 2 :(得分:0)
有可能在GIT copy file preserving history的帮助下,您需要在删除文件之前复制文件。
我会在这里写一个完整的例子。首先,我将准备一些测试库:
git init
echo "test content" > file.txt
git add file.txt
git commit -m "start"
echo "test content 2" >> file.txt
git commit -m "next commit"
git commit -am "next commit"
rm file.txt
git commit -am "Delete file, lose history"
现在我们有了一个没有文件的测试库。要使用提交历史记录还原文件,请执行以下过程:在文件确实存在的地方创建一个分支。然后制作该文件的两个副本,每个副本都有历史记录。然后合并回母版,合并期间将仅删除两个副本之一。
git checkout 190112b -b before-deletion
git mv file.txt file1.txt
git commit -m "Move file (1)"
SAVED=`git rev-parse HEAD`
git reset --hard "HEAD^"
git mv file.txt file2.txt
git commit -m "Move file (2)"
git merge $SAVED
git commit -a -n
好的,所以现在在这个分支中,我们有该文件的两个副本。每个副本都保留历史记录。现在,当我们将其合并回主文件时,一个文件将消失(或具有错误的历史记录),另一个将保留历史记录。
git checkout master
git merge before-deletion
git commit -a -n
git rm file1.txt
git mv file2.txt file.txt
git commit -m "recovery finished"
就是这样。