还原未在git中暂存的已删除文件
我不小心删除了我源代码的整个目录…使用了一个漂亮的rm-r。我知道,真的很糟糕;但幸运的是,我在包含目录中有一个git repo。因此,git有一个巨大的未归档的已删除文件的更改列表。例如:还原未在git中暂存的已删除文件,git,git-checkout,rm,git-revert,git-rm,Git,Git Checkout,Rm,Git Revert,Git Rm,我不小心删除了我源代码的整个目录…使用了一个漂亮的rm-r。我知道,真的很糟糕;但幸运的是,我在包含目录中有一个git repo。因此,git有一个巨大的未归档的已删除文件的更改列表。例如: "deleted: src/caronmonitor/server.py" 我如何取回这些文件?网络上到处都有这样的建议: git checkout file 或 git还原 但据我所知,这将使文件恢复到上次提交时的状态。我不想返回到上一次提交,而是返回到删除操作之前。我可以在gitk中查看我的
"deleted: src/caronmonitor/server.py"
我如何取回这些文件?网络上到处都有这样的建议:
git checkout file
或
git还原
但据我所知,这将使文件恢复到上次提交时的状态。我不想返回到上一次提交,而是返回到删除操作之前。我可以在gitk中查看我的文件,就像删除之前一样;因此,这必须是可能的 是的,您应该执行
git签出文件名
如果您有多个文件,并且希望恢复所有文件,请从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
不,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");
}
git不会存储任何从未添加或提交的更改。您所能做的最好的事情就是git签出已删除的目录,然后将其恢复到上次提交时的状态
git签出
您看到的本地未提交更改可能是未提交的删除,即git看到您删除了一堆文件,但您尚未提交这些文件已被删除的事实,因此git说“嘿,有一些更改(在本例中为删除)您尚未提交。”类似的情况也发生在我身上。我曾经使用过Android Studio,但它也可以在其他JetBrains IDE中使用 我已通过
本地历史记录>显示历史记录
还原了已删除的文件,然后还原了所有已删除的文件
希望对某人有所帮助。在删除文件之前,您是否已暂存该文件?否则git diff只会向您显示上一次提交的状态,这些提交没有被暂存。我搞砸了,我是说吉特。那么,在gitk中“本地未提交的更改,未签入索引”下的内容是上次提交时的内容吗?我知道git没有任何魔力;但似乎在gitk中,git在删除之前有一个文件副本。我还意外地从git repo中删除了一个文件,并且能够还原它,至少我认为是这样。@Vance Turner我添加了一个小例子来说明我是如何看待这一点的。
int main(argc[] args){
System.out.println("example");
}