Git pull删除了未提交的更改

Eri*_*ric 6 git

我刚刚在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
Run Code Online (Sandbox Code Playgroud)

伊克!我的所有文件都消失了!发生了什么?我能把它们还给他们吗?

jth*_*ill 12

你可以把它们拿回来.即使唯一指向它的是索引,git add仍然将添加的内容放在回购中.我首先git fsck要找到一个"晃来晃去"(git略有古怪的"未引用"拼写)blob和git cat-file -p那些blob,如果有太多我会做的话find .git/objects -type f | xargs ls -lt.

  • 由于某些人可能不太清楚,你可以使用`git cat-file -p <hex>`,其中<hex>参数由输出`git fsck`命令给出. (3认同)
  • `git fsck --lost-found`可能是最简单的前进方式. (2认同)

小智 6

对我来说以下工作有效:

  1. 转到受影响的文件。
  2. 右键单击并选择“本地历史记录”,然后选择“显示历史记录”。从那里您可以看到对文件所做的更改的历史记录,然后选择要将文件恢复到的时间。
  3. 您将看到两个窗口,其中左侧的窗口具有>>。单击所有>>,这会将您的更改发送到右侧窗口。
  4. 关闭窗口,然后您的文件就恢复到您想要的位置了。

我希望它有帮助!


小智 5

我同意已接受的答案,但就我而言, 的结果太多了git fsck。这个解决方案帮助我找到了丢失的文件:

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

grep -rin <string_in_missing_file> .git/
Run Code Online (Sandbox Code Playgroud)

例如:

grep -rin MyClassName .git/
Run Code Online (Sandbox Code Playgroud)

搜索结果:

.git//lost-found/other/3cfaa36226f52a5c1b38c2d2da3912656c998826:5:class MyClassName extends ParentClass
.git//lost-found/other/e7b8923de4afb230ad523b5b515f50cb9c624248:5:class MyClassName extends ParentClass
Run Code Online (Sandbox Code Playgroud)

其中搜索结果是:

.git/<path_to_file>:<line_number_of_found_string>:<found_string_and_context>
Run Code Online (Sandbox Code Playgroud)

然后恢复文件:

git cat-file -p 3cfaa36226f52a5c1b38c2d2da3912656c998826 > ../<desired_file_path>/MyClassName.php
Run Code Online (Sandbox Code Playgroud)