我的本地git repo有“未上演”的已删除文件,远程是文件,如何删除丢失的文件?

时间:2012-01-25 01:14:21

标签: git

我读过关于git cleangit reset但我不认为他们做了我需要的事情。我尝试了git pull,但没有解决问题(git pull结果为:Already up-to-date.

我在github的远程回购很好。

我刚把我所有的铁轨项目从我的旧PC复制到了我的新Mac,它也有一个工作的rails dev环境。

其他一切都很好,但不知何故,我的很多db / migration文件都在本地丢失了。 (不知道为什么......没有别的东西丢失了。)

当我cd进入目录并运行git status时,我看到同样的事情:

# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    db/migrate/20110330064532_init_user_guids.rb
#   deleted:    db/migrate/20110330065055_init_master_report_key.rb
#   deleted:    db/migrate/20110331001956_create_recurly_accts.rb

无论如何,我正在寻找将所有丢失的(不是暂存的+已删除的)文件从远程(原始)拉到本地的命令,而不删除本地的任何未跟踪文件,例如我的sqlite数据库。

或许是一个git命令可以从我的本地git仓库恢复它们,因为删除是“未分级”的?

(我应该补充一点,我没有其他未分级的更改...只需要替换那些丢失的文件。)

3 个答案:

答案 0 :(得分:6)

如果唯一的更改是丢失的文件,则可以使用git reset --hard HEAD,这会将所有内容恢复到原始状态。但是,它将删除任何未跟踪的文件(您需要git clean)。因此,这应该是安全的,因为它将恢复您丢失的文件,但保留未跟踪的数据库。

答案 1 :(得分:3)

尝试:

git checkout db/migrate/20110330064532_init_user_guids.rb

答案 2 :(得分:1)

所有这些状态告诉您文件是在存储库中但不在工作副本中。存储库也就在你的机器上。 git status认为您执行了rm db/migrate/...作为您可能想要提交的更改(就像编辑文件一样)。要撤消这些更改,您可以使用git checkout db/migrate/...从本地存储库中获取未修改(在本例中为未删除)的副本。如果您没有其他待处理的更改,则可以使用git reset --hard进行批量处理。

您不需要从远程仓库获取代表这些文件的对象,除非通过一些黑暗魔法,这些对象也会丢失。在这种情况下,简单的git fetch会将对象带到您的本地仓库,您可以恢复上述工作副本。