我是一个git noob,git刚刚删除了一堆重要文件。我如何让他们回来?
我的本地机器上有一个回购。为了进入git,我只需右键单击我的项目文件夹并选择“git bash here”。这会让我掌握所有主要内容的主人。
所以我对舞台做了一些改动,我做了:
git add .
这上演了一系列变化。我注意到我不想要其中一些上演,所以我决定我试图取消前进。我这样做了:
git reset --hard HEAD^
这基本上删除了我在上次提交时创建的一堆文件,然后跳转到了提交。
如何取回这些文件?如果我不能通过git实现它还有另一种方式吗?
答案 0 :(得分:9)
我对原始建议(见编辑历史记录)有所纠正。作为忏悔,我已经找到了从git中恢复丢失文件的最简单方法:
git fsck --lost-found
ls .git/lost-found/other
不幸的是,文件名丢失了,但内容应该都是不同的文件。
答案 1 :(得分:1)
听起来你想要旧的HEAD(而不是HEAD ^),在这种情况下你可以简单地检查出那个版本。使用git reflog
显示以前的HEAD并查找所需的提交,然后将其签出。
如果您想要在重置之前暂存的文件,请参阅其他答案。
答案 2 :(得分:0)
不,带
git reset --hard HEAD^
更改将恢复为上次提交并永久丢失。
答案 3 :(得分:0)
从此SO-Question:
您可以(通过一些工作)在最后一个“git add < file> ”恢复文件状态。你可以使用
$ git fsck --cached --no-reflogs --lost-found --unreachable HEAD
然后检查“.git/lost-found/blob/
”目录中的文件。
请阅读git fsck联机帮助页:我尚未检查上述调用。
答案 4 :(得分:0)
如 @tanascius 所述,您可以使用以下命令恢复已添加但未提交的文件。此命令在控制台SHA-1中打印对 blob 和 树 对象的引用。
$ git fsck --cache --no-reflogs --lost-found --unreachable HEAD
blob 对象正是git reset
命令丢失的文件。使用以下命令将其还原(不幸的是,实际文件名丢失了):
$ git show "<SHA-1 REFERENCE TO THE BLOB OBJECT HERE>" > lost_file.txt