如何恢复我的代码?
我做了以下两个命令:
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}
提交中。啊......我不知道我在说什么。请帮忙:/
任何帮助将不胜感激!
答案 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上并且对光盘上的文件进行了本地更改,那么您希望在合并之前提交更改,丢弃它们或存储它们。