我想恢复到我的应用程序的备份副本

时间:2012-03-02 05:42:57

标签: git

我已经研究了这个话题,但我担心我对Git的经验太少,并且可能通过尝试不同的事情导致更多的问题,所以我发帖找出恢复到以前的App状态的最佳方法

我提交了更改并删除了以前的分支,但在我在外部驱动器上本地备份应用程序之前没有。

一切都运行良好(功能方面),正如我在最近的更改之前部署到Heroku之前所证明的那样,它仍在工作。

我没有为新的更改创建一个分支,我将永远不会再做一些事情,而且我正在为主人工作。虚伪的信心......

所以,既然一切都是如此可怕的错误,我决定复制备份的应用程序并开始新的......但这没有用。

我认为这可能是一个简单的问题,即恢复对主人的未提交的更改,但我有点冷冻,担心我可能会犯错误。

你能帮忙吗?

我正在使用rails 3.2,ruby 1.9.3,git 1.7.4.4

更新


我使用了git reset --hard HEAD,现在终端告诉我     HEAD现在为820f417 micro。

我遇到的问题是:

我不知道这可能会或者可能不会更改我在textmate中编辑并保存到硬盘中的文件。

当我在浏览器中打开应用程序时,出现错误:

ActiveRecord::StatementInvalid in StaticPagesController#home

Could not find table 'users'

跟踪:     app / helpers / sessions_helper.rb:46:in user_from_remember_token' app/helpers/sessions_helper.rb:16:in current_user'     app / helpers / sessions_helper.rb:9:in signed_in?' app/controllers/static_pages_controller.rb:4:in home'

3 个答案:

答案 0 :(得分:2)

the Git Book

涵盖了还原提交

如果您尚未提交更改,则无法恢复更改。除非我误解了您并且您希望将未提交的更改还原为最后提交的版本,否则这很容易。

以下是一个例子:

这是四次修订后的文件。只有前三个已经提交。

> cat file
This is revision 4

获取状态:

> git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   file
#
no changes added to commit (use "git add" and/or "git commit -a")

恢复到上次提交的版本:

> git reset --hard HEAD
HEAD is now at e0d512a Revision 3

查看文件:

> cat file
This is revision 3

还原最后一次提交:

> git revert HEAD
Finished one revert.
[master 92a575c] Revert "Revision 3"
 1 files changed, 1 insertions(+), 1 deletions(-)

查看文件:

> cat file
This is revision 2

查看修订历史记录:

> git log
commit 92a575c481c69fc1dd809ba02a63009141f95b96
Date:   Fri Mar 2 17:13:36 2012 +1100

    Revert "Revision 3"

    This reverts commit e0d512acebbfb3891888dc59074f7d1f0748bba6.

commit e0d512acebbfb3891888dc59074f7d1f0748bba6
Date:   Fri Mar 2 17:11:25 2012 +1100

    Revision 3

commit efc6d5af434c56991dabee43f36bc6e7ff284da7
Date:   Fri Mar 2 17:11:01 2012 +1100

    Revision 2

commit 8b73c59bb517df2589dcd0285a6d19045882ad8e
Date:   Fri Mar 2 17:10:20 2012 +1100

    Revision 1
>

答案 1 :(得分:1)

如果您知道要将工作树还原到的提交的SHA哈希,则可以使用git checkout <commit> --在当前分支上获取指定的提交。

如果您希望查看文件内容的差异,可以使用git diff命令。如果要将工作树与分支的HEAD(最后一次提交)进行比较,请使用git diff HEAD。如果要查看特定文件的差异,请在diff命令的末尾列出这些文件。您可以使用git diff与外部文件进行比较,但是在查看外部备份之前,您应该专注于确定您的存储库是否仍然包含您需要的存储库状态的提交。

答案 2 :(得分:0)

当我想在一个已提交的文件上丢弃我最近的更改时,请说A.cpp。

我使用git checkout -- A.cpp