11

我刚刚在 github 上创建了一个新的存储库。从一个充满文件的文件夹开始,我所做的步骤是:

git init
git add -A
git remote add origin ...

#Now pull in the first commit that github made
git pull origin master

#Check everything is OK
ls

哎呀!我所有的文件都消失了!发生了什么?我可以让他们回来吗?

4

5 回答 5

15

你可以让他们回来。尽管唯一指向它的是索引,git add但仍将添加的内容放在 repo 中。我会从 a 开始git fsck寻找“悬空”(git 对“未引用”的稍微古怪的拼写)blob 和git cat-file -p那些 blob,如果有太多我会做类似find .git/objects -type f | xargs ls -lt.

于 2012-04-22T17:40:40.817 回答
5

对我来说,以下工作:

  1. 转到受影响的文件。
  2. 右键单击并选择Local History并选择Show History。从那里您可以查看对文件所做更改的历史记录,然后选择要将文件恢复到的时间。
  3. 你会得到两个窗口,左边的一个有>>。单击所有>>,这会将您的更改发送到右侧窗口。
  4. 关闭窗口,然后您就可以将文件恢复到您想要的位置。

我希望它有帮助!

于 2019-07-30T10:23:36.633 回答
4

我同意接受的答案,但是在我的情况下,结果太多了git fsck。这个解决方案帮助我找到丢失的文件:

在丢失的文件中搜索字符串:

grep -rin <string_in_missing_file> .git/

例如:

grep -rin MyClassName .git/

搜索结果:

.git//lost-found/other/3cfaa36226f52a5c1b38c2d2da3912656c998826:5:class MyClassName extends ParentClass
.git//lost-found/other/e7b8923de4afb230ad523b5b515f50cb9c624248:5:class MyClassName extends ParentClass

搜索结果在哪里:

.git/<path_to_file>:<line_number_of_found_string>:<found_string_and_context>

然后恢复文件:

git cat-file -p 3cfaa36226f52a5c1b38c2d2da3912656c998826 > ../<desired_file_path>/MyClassName.php
于 2015-08-04T02:26:05.347 回答
3

当我尝试推送我的提交并收到提示时,我做了类似的事情:更新被拒绝,因为您当前分支的提示落后于提示:它的远程对应项。在再次推送之前集成远程更改(例如提示:'git pull ...')。

我试图通过

git reset HEAD~3 . 
git stash 
git pull 
git stash pop
git push

并意外地再次拉动并推动更改。我7天的所有工作都丢失了。

这对我来说可以让我的所有工作回到本地分支:

git reset --hard HEAD@{"15 minutes ago"}

于 2020-01-03T17:19:12.217 回答
1

由于您从未提交过文件,因此不抱歉。您需要采取的步骤是:

git init
git add .
git commit -m 'Initial commit'
git remote add origin ...
git push origin master

请记住,当有疑问时,请始终承诺。只要你这样做,你总是可以用 git 撤销东西。

于 2012-04-22T14:54:23.090 回答