我读过关于git clean
和git 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仓库恢复它们,因为删除是“未分级”的?
(我应该补充一点,我没有其他未分级的更改...只需要替换那些丢失的文件。)
答案 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
会将对象带到您的本地仓库,您可以恢复上述工作副本。