首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何恢复代码?Git noob

如何恢复代码?Git noob
EN

Stack Overflow用户
提问于 2011-03-18 11:15:19
回答 3查看 987关注 0票数 3

如何恢复我的代码?

我执行了以下两个命令:

代码语言:javascript
复制
git log -all -p
git reflog

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

下面是reflog显示的内容:

代码语言:javascript
复制
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}提交中。啊...我完全不知道我在说什么。请帮助:/

任何帮助都将不胜感激!

EN

回答 3

Stack Overflow用户

发布于 2011-03-18 15:14:49

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

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

代码语言:javascript
复制
         static-pages
            master      filling-in-layout
o------o------X------o------o

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

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

代码语言:javascript
复制
            master
o------o------X
 \
  \  filling-in-layout
   o------o

git reset --hard filling-in-layout会让你丢失(可撤销的)在主布局中而不是在填充布局中的提交。

票数 6
EN

Stack Overflow用户

发布于 2011-03-18 11:27:29

你会这样做:

代码语言:javascript
复制
git reset --hard HEAD@{1}
票数 4
EN

Stack Overflow用户

发布于 2011-03-18 16:38:10

您有三个分支:主页、填充布局和静态页面。光盘上的文件反映了您已签出的提交。

检出master时,光盘上的文件将与master中提交的文件匹配。

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

代码语言:javascript
复制
git checkout filling-in-layout

如果您想要采用您在filling in -layout中所做的更改,并将它们导入到您的主分支,请像对HEAD@{4}所做的那样进行合并:

代码语言:javascript
复制
git checkout master
git merge filling-in-layout

请注意,如果您已经在主服务器上,并且对磁盘上的文件进行了本地更改,则需要在合并之前提交更改、放弃更改或将更改隐藏起来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5347677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档