2012-03-02 94 views
0

我已经研究过这个主题,但是我担心我对Git的经验太少,并且可能会通过尝试不同的事情导致更多问题,所以我张贴以查明恢复到我的应用程序以前的状态的最佳方式。我想恢复到我的应用程序的备份副本

我承诺进行了更改并删除了以前的分支机构,但之前我在外部驱动器上本地备份应用程序。

一切工作正常(功能),我的部署到Heroku,它仍在工作,在我最近的变化之前,证明。

我未能为新变更创建分支,我再也不会这样做了,而我正在关闭主人。虚假的信心...

因此,因为一切都变得如此可怕的错误,我决定复制备份的应用程序,并开始新的......但没有奏效。

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

你能帮忙吗?

我在轨道上3.2,红宝石1.9.3,git的工作1.7.4.4

更新


我用的git的复位 - 硬头,现在终端告诉我 HEAD是现在在820f417微。我有

的问题是:

我不知道如何这可能会或可能不会改变的文件,我已经编辑里面的TextMate,并保存到硬盘驱动器。

当我在浏览器中打开的应用程序,我得到的错误:

ActiveRecord::StatementInvalid in StaticPagesController#home 

Could not find table 'users' 

跟踪: 应用程序/佣工/ sessions_helper.rb:46:在user_from_remember_token' app/helpers/sessions_helper.rb:16:in CURRENT_USER” 应用程序/佣工/ sessions_helper。 RB:9:signed_in?' app/controllers/static_pages_controller.rb:4:in家”

+1

你有什么承诺?如果工作版本提交给git,则只需获取该版本。忘记在这种情况下的备份。这就是你有版本控制。 – tripleee 2012-03-02 06:19:22

+1

同意重新。硬盘。将您的存储库复制到外部来源只会混淆事项 - 就像它已经完成的那样。如果您担心“备份”,请创建一个Github存储库并对其进行本地更改。这为您在Github.com上看到您的提交树提供了一个很好的用户界面。 – jmlane 2012-03-02 06:49:05

回答

2

还原提交覆盖在the Git Book

如果您还没有致力于的变化,你无法恢复到它们。除非我误解了你的意思,并且你希望恢复未提交更改回到最后提交的版本,在这种情况下,这很容易。

下面是一个例子:

这里的后4次修订的文件。只有前三个承诺。

> 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 
> 
+0

好的,谢谢。我正在阅读,现在已经使用:git rest - hard HEAD,它将我带回了我最后一次承诺的分支,我认为...我不清楚git如何改变文件的状态在我的硬盘上恢复到以前的状态?我会继续阅读,但这会有很大帮助。 – 2012-03-02 06:01:06

+0

Git在您的存储库的隐藏.git /目录中记录了所有对您的文件所做的修改。 'git reset'命令通过查看每个文件所需的修改以包含正确的内容来等同于该提交中的内容,来简单地更改工作树和/或索引。 – jmlane 2012-03-02 06:14:29

+1

我已经添加了一个例子,我希望这有助于。 – Johnsyweb 2012-03-02 06:18:41

0

当我想扔掉的一个坚定的文件我最近的变化,说A.cpp。

我用git checkout -- A.cpp

+0

谢谢。没有任何运气。 – 2012-03-02 07:54:53

1

如果你知道的提交SHA哈希你想恢复你的工作树,你可以使用git checkout <commit> --获取指定提交你的当前分支。

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

+0

SHA是否出现在这里:Brian $ git commit -a -m“micro” [master 820f417] micro 8个文件已更改,0个插入(+),0个删除( - ) – 2012-03-02 06:15:29

+0

是的,820f417是第一部分提交SHA,这足以引用该提交(您不需要完整的东西)。 – jmlane 2012-03-02 06:17:28

+0

嗯......当我输入这个:git checkout 820f417,我得到这个: -bash:commit:没有这样的文件或目录 – 2012-03-02 06:23:37