我不小心删除了我的源代码的整个目录......用一个不错的rm -r。我知道,非常糟糕;但幸运的是,我在包含目录中有一个git repo。因此,git有大量已删除文件的未分级更改。例如:
"deleted: src/caronmonitor/server.py"
如何获取这些文件?网上有建议:
git checkout file
或
git revert <commit>
但据我所知,将在最后一次提交时将文件恢复到它的状态。我不想回到最后一次提交,而是在删除操作之前返回到右边。我可以查看gitk并查看删除之前的文件;因此这一定是可能的。
答案 0 :(得分:16)
是的,您应该git checkout filename
如果您有多个文件,并希望将所有文件还原,请使用git目录根目录中的git 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
答案 1 :(得分:6)
不是,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");
}
您保存文件,关闭编辑器,不执行任何操作并执行rm -r
现在文件就在那里,git引用了文件并且它已被删除但是git中这个文件的内容只是:
int main(argc[] args){
System.out.println("example");
}
答案 2 :(得分:0)
git不会存储任何从未添加或提交的更改。你可以做的最好的事情是git checkout删除了目录,然后你将它恢复到上次提交内容时的状态。
git checkout <branch_you_are_in> <directory_of_all_your_source_code>
您看到的本地未提交的更改可能是未提交的删除,即git看到您已删除了一堆文件,但您还没有承认它们已被删除,因此git说嘿,你还没有做出一些改变(在这种情况下,删除)。&#39;
答案 3 :(得分:0)
我在 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