Git Detached HEAD丢失了数据

时间:2014-11-12 18:27:50

标签: git git-detached-head

不知何故,我最终得到了一个独立的HEAD。我做了一些提交,它们在我的提交历史中显示为HEAD(但master后面有几个提交)。然后我试着通过查看master来修复分离的头部。

现在我没有看到我之前对超级HEAD的承诺。它们永远消失了吗?

3 个答案:

答案 0 :(得分:2)

  

[我之前的承认]是否永远消失了?

没有。即使这些提交没有出现在git log的输出中,它们仍然存在于您的存储库的内部,您仍然可以检索它们;在这种情况下,reflog是您的安全网。

如果没有更多信息,很难提供一系列肯定会让您免于麻烦的命令,但您可以执行以下操作:

  1. 通过运行

    打开master分支的reflog
    git reflog master
    
  2. 使用提交消息作为提示,确定您希望master分支指向的提交;写下(在一张纸上)master reflog中相应条目的编号。退出reflog。

  3. 确保master是当前分支:

    git checkout master
    
  4. 运行

    git reset master@{<n>}
    

    其中<n>代表与感兴趣的提交相对应的reflog条目的编号。

  5. 之后,master应该指向所需的提交,就像你最终得到一个分离的HEAD一样。

答案 1 :(得分:1)

没有。检查reflog(git reflog)。

答案 2 :(得分:0)

除非你使用Git的石器时代版本,否则它打印出来的信息非常好(这些来自2.2.0,但我认为自1.8.X或更早版本以来就是这样)

当你第一次进入超级头状态时,它应该告诉你如何创建一个分支来处理。

  

注意:退房&#39; HEAD~1&#39;。

     

你处于分离头部&#39;州。你可以四处看看,制作   实验更改并提交它们,您可以放弃任何提交   你在这种状态下通过表演而不影响任何分支   另一个结账。

     

如果您想创建一个新分支来保留您创建的提交,那么   可以通过再次使用-b和checkout命令来执行此操作(现在或稍后)。   例如:

     

git checkout -b new_branch_name

当你离开头状态时,你应该得到这个消息

  

警告:你要离开1个提交,而不是连接到任何提交   分支:

     

27c4eec foo

     

如果你想通过创建一个新的分支来保留它们,这可能是件好事   时间这样做:

     

git branch new_branch_name 27c4eec

如果您没有看到这些消息,那么您应该考虑升级您的Git版本。

如果您确实看到了这些消息,请按照打印出的说明进行操作。