恢复未暂存在git中的已删除文件

pn9klfpd  于 2023-02-28  发布在  Git
关注(0)|答案(6)|浏览(838)

我不小心删除了我的源代码的整个目录...用一个很好的rm -r。我知道,真的很糟糕;但幸运的是,我在包含目录中有一个git repo,因此,git有一个巨大的列表,其中包含了已删除文件的unstaged更改。

"deleted:   src/caronmonitor/server.py"

我该如何找回这些文件?网上到处都有建议:

git checkout file

git revert <commit>

但据我所知,这会将文件恢复到上次提交时的状态。我不想回到上次提交,而是回到删除操作之前的状态。我可以在gitk中查看删除前的文件;因此这是可能的。

uemypmqf

uemypmqf1#

是的,您应该执行git checkout filename
如果你有多个文件,并且想把它们全部还原回来,可以使用git根目录下的git checkout .命令。
checkout 将文件恢复为添加/提交的最后版本;如果一个文件还没有被添加或提交,那么它将丢失.
例如:

$ git init && touch test1.txt test2.txt test3.txt
$ git add test1.txt && git commit -m "test1" && git add test2.txt
$ ls -a
.  .. .git test1.txt  test2.txt test3.txt

#deleting files below, 2 will be recovered, 3rd will be gone.
$ rm *
$ ls -a
.  .. .git

$ git checkout .
$ ls -a
.  .. .git test1.txt  test2.txt
#test3.txt is gone, test2.txt was recovered, even though not committed but just added
j0pj023g

j0pj023g2#

不,GIT不会做任何魔法。如果你没有暂存或提交你的更改,那么这些更改就会消失。你可以看到删除,但你只能将它们恢复到你告诉GIT记住它的最后状态。

您必须显式地告诉GIT通过暂存和提交来记住您的更改。

因此,如果您的存储库中有file.txt,其中包含以下内容:

int main(argc[] args){
      System.out.println("example");
    }

这是您上次提交或暂存的更改。
现在您编辑file.txt以包含如下内容:

int main(argc[] args){
 System.out.println("example");
 System.out.println("Hey I can print more lines");
}

保存文件,关闭编辑器,不对git执行任何操作,然后执行rm -r现在文件已经存在,并且git引用了文件,文件已经被删除,但是这个文件在git中的内容只有:

int main(argc[] args){
      System.out.println("example");
    }
ikfrs5lh

ikfrs5lh3#

类似的事情也发生在我身上。我用过Android Studio,但它在其他JetBrains IDE中也能工作。
我已经通过Local history > show history恢复了我删除的文件,然后我已经恢复了所有删除的文件。
希望能帮上忙。

cx6n0qe3

cx6n0qe34#

git不会存储任何从未添加或提交过的更改,你能做的最好的事情就是git checkout 那个被删除的目录,然后你会把它恢复到上次提交时的状态。
git checkout <branch_you_are_in> <directory_of_all_your_source_code>
你看到的本地未提交的修改很可能是未提交的删除,也就是说git看到你删除了一堆文件,但是你还没有提交它们被删除的事实,所以git会说'嘿,还有一些修改(这里是删除)你还没有提交。'

velaa5lx

velaa5lx5#

我已经在Eclipse IDE中打开了这个文件,所以为了恢复我在git checkout 时意外丢失的更改,我在Eclipse IDE中按照下面的建议进行了操作。
https://www.oreilly.com/library/view/eclipse-cookbook/0596007108/ch04s08.html 4.7.从本地历史记录还原元素和文件
您还可以通过在视图(如包资源管理器)中右键单击文件并选择以下菜单项之一来将整个文件恢复为其以前的版本:
替换为→本地历史中的上一个

Replaces the file with the previous version in local history

替换为→本地历史记录

Replaces the file with a version you select from local history

从本地历史记录还原

Restores a file from local history
dl5txlt9

dl5txlt96#

原来,新的未提交的文件时,删除可以从回收站恢复(我使用的源树)。

相关问题