我如何恢复代码? Git noob

时间:2011-03-18 03:15:19

标签: git

如何恢复我的代码?

我做了以下两个命令:

git log -all -p
git reflog

我看到我的代码在那里。但是,我不确定如何恢复它们。

以下是reflog显示的内容:

23f50a6 HEAD@{0}: checkout: moving from filling-in-layout to master
39bdf8c HEAD@{1}: commit: Finished layout and routes
2ca279b HEAD@{2}: commit: Removed default Rails page
23f50a6 HEAD@{3}: checkout: moving from master to filling-in-layout
23f50a6 HEAD@{4}: merge static-pages: Fast-forward
436aabd HEAD@{5}: checkout: moving from static-pages to master
23f50a6 HEAD@{6}: commit: Done with static pages
c11e8b0 HEAD@{7}: commit: Added a Pages controller
436aabd HEAD@{8}: checkout: moving from master to static-pages
436aabd HEAD@{9}: commit: Improved the README and .Gitignore
a1d135d HEAD@{10}: commit (initial): Initial commit v.3

我按HEAD@{0}所示结帐后,我的所有代码都被删除并恢复为HEAD@{9}状态。我就是这样的菜鸟,我正在学习与Hartl教程的RoR。但是,按照他的建议,我在过去5个小时内完成的所有工作都已消失。它们应该在HEAD@{1}提交中。啊......我不知道我在说什么。请帮忙:/

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:6)

首先,当您建议或建议使用git reset --hard时,您应该非常小心 - 它是为数不多的git命令之一,可能导致不可挽回的数据丢失。那就是说,在你的情况下它可能是安全的。

如果你的存储库没有任何奇怪的东西,那就没有什么可以恢复的;你所有的工作安全地坐在树枝上; git merge filling-in-layout应解决您的问题。假设您在切换到它们之前就创建了分支,那么您的存储库目前看起来如下:

         static-pages
            master      filling-in-layout
o------o------X------o------o

其中X指定当前提交。要获得填充布局的更改,只需将它们合并到master。

由于这是一个快进合并(即分支没有分歧),git reset --hard在这种情况下会做同样的事情,除了它还不可撤销地删除所有未经修改的更改 。此外,如果您处于填写布局和主人分歧的情况,例如

            master
o------o------X
 \
  \  filling-in-layout
   o------o

git reset --hard filling-in-layout会让你失败(可撤销)主要的提交而不是填写布局。

答案 1 :(得分:4)

你会这样做:

git reset --hard HEAD@{1}

答案 2 :(得分:1)

您有三个分支:master,fill-in-layout和static-pages。 光盘上的文件反映了您已签出的提交。

当您签出master时,光盘上的文件与master中提交的文件相匹配。

如果你想恢复分支填充布局中文件的状态,只需查看分支:

git checkout filling-in-layout

如果您想在填充布局中进行更改并将其导入主分支,请按照HEAD @ {4}的方式进行合并:

git checkout master
git merge filling-in-layout

请注意,如果您已经在master上并且对光盘上的文件进行了本地更改,那么您希望在合并之前提交更改,丢弃它们或存储它们。