如何恢复我的代码?

我执行了以下两个命令:

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} 提交中。啊..我不知道我在说什么。请帮忙 :/

任何帮助都感激不尽!

最佳答案

首先,当您建议或被建议使用 git reset --hard 时,您应该非常小心——它是少数会导致数据不可撤销丢失的 git 命令之一。也就是说,在你的情况下它可能是安全的。

如果你的仓库没有任何奇怪的东西,那就没有什么可以恢复的了;你所有的工作都安全地放在一个分支上; git merge filling-in-layout 应该可以解决您的问题。假设您确实在切换到分支之前创建了分支,那么您的存储库目前如下所示:

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

其中 X 指定当前提交。要获得填充布局中的更改,您只需将它们 merge 到母版即可。

由于这是一个快进 merge (即分支没有发散),git reset --hard 在这种情况下也会做同样的事情,除了它还会不可撤销地删除所有未提交的更改。此外,如果您处于填充布局和母版分歧的情况,例如
            master
o------o------X
 \
  \  filling-in-layout
   o------o
git reset --hard filling-in-layout 会让你丢失(可撤销地)在 master 中而不是在填充布局中的提交。

关于git - 我如何恢复代码? Git 菜鸟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5347677/

10-14 17:55
查看更多