Git pull删除了未提交的更改

时间:2012-04-22 14:48:35

标签: 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

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

5 个答案:

答案 0 :(得分:11)

你可以让他们回来。即使唯一指向它的是索引,git add仍然将添加的内容放在回购中。我从一个git fsck开始找到“悬空”(git略微古怪的“未引用”拼写)blob和git cat-file -p这些blob,如果有太多我会做{{1}这样的事情}。

答案 1 :(得分:2)

我同意接受的答案,但在我的案例中,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

答案 2 :(得分:1)

当我尝试推动提交并得到 提示:由于您当前分支的提示位于后面,因此更新被拒绝 提示:它的远程副本。集成远程更改(例如 提示:“ git pull ...”),然后再次按下。

我尝试通过

恢复提交
git reset HEAD~3 . 
git stash 
git pull 
git stash pop
git push

,不小心再次拉动并推动更改。我所有的7天工作都丢失了。

这对我来说很有效,可以将我的所有工作都恢复到本地分支机构:

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

答案 3 :(得分:0)

由于你从未提交过文件,不好意思。您需要采取的步骤是:

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

请记住,如有疑问,请务必提交。只要你这样做,你就可以随时用git撤消。

答案 4 :(得分:0)

对我来说,以下工作有效:

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

希望对您有帮助!