Van*_*ner 10 git rm git-revert git-checkout git-rm
我不小心删除了我的源代码的整个目录...用一个很好的rm -r.我知道,非常糟糕; 但幸运的是,我在包含目录中有一个git repo.因此,git有一个巨大的已删除文件的非分段更改列表.例如:
"deleted: src/caronmonitor/server.py"
Run Code Online (Sandbox Code Playgroud)
如何获取这些文件?网上有建议:
git checkout file
Run Code Online (Sandbox Code Playgroud)
要么
git revert <commit>
Run Code Online (Sandbox Code Playgroud)
但据我所知,将在最后一次提交时将文件恢复到它的状态.我不想回到最后一次提交,而是在删除操作之前返回到右边.我可以查看gitk并查看删除之前的文件; 因此这一定是可能的.
mu *_*u 無 16
是的,你应该做一个 git checkout filename
如果您有多个文件,并希望将所有文件还原,请使用git checkout .git目录的根目录.
结帐会将文件还原到已添加/已提交的最新版本; 如果尚未添加或提交文件,则文件将丢失.
所以,例如:
$ 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
Run Code Online (Sandbox Code Playgroud)
类似的事情也发生在我身上。我使用过Android Studio,但它也可以在其他JetBrains IDE中使用。
我已通过恢复已删除的文件Local history > show history,然后恢复了所有已删除的文件。
希望它能帮助某人。
不,GIT 不会做任何魔术。如果您没有上演或提交更改,则这些更改将消失。您可以看到删除,但是您只能将其还原到您告诉GIT为您记住的最后状态。
您必须明确指示GIT通过登台和提交来记住您的更改。
因此,如果您的存储库中有包含内容的file.txt:
int main(argc[] args){
System.out.println("example");
}
Run Code Online (Sandbox Code Playgroud)
这是您提交或上演的最后更改。
现在,您编辑file.txt使其包含以下内容:
int main(argc[] args){
System.out.println("example");
System.out.println("Hey I can print more lines");
}
Run Code Online (Sandbox Code Playgroud)
您保存文件,关闭编辑器,对git不执行任何操作,然后执行操作rm -r
现在文件已存在,并且git引用了该文件,并且该文件已被删除,但是该文件在git中的内容仅为:
int main(argc[] args){
System.out.println("example");
}
Run Code Online (Sandbox Code Playgroud)