6 题: 当不在任何分支时,当前不在任何分支+ git commit + checkout上。我放松了改变吗?

在...创建的问题 Wed, Jun 19, 2013 12:00 AM

当我提交更改时,我目前不在任何分支机构。 我没有真正注意到这个消息并检查了另一个分支。

如何检索我的更改? 我无法合并或结帐,因为没有要合并的分支。

    
35
  1. 你提交的时候还有控制台输出吗?它包含提交的SHA1吗?如果是这样,您就拥有了提交对象,这就是您需要的所有内容
    2011-05-18 17:12:47Z
  2. 我...不知道你在一个分支......
    2011-05-18 17:13:00Z
  3. @ Ignacio最常见的不在分支上的情况是当你签出提交时它不是分支的尖端
    2011-05-18 17:19:58Z
  4. @ Ignacio:它非常实用!您可以在历史记录中提交,而无需移动任何分支提示 - 特别有用,例如,在尝试查找git bisect的良好提交时。 “detached HEAD”是此状态的名称,因为HEAD直接指向提交而不是通过特定引用间接指向一个提交。
    2011-05-18 18:40:07Z
  5. 醇>
    6答案                              6 跨度>                         

    你可以使用git reflog来获取你在“无分支”(一个分离的HEAD)中所做的提交的提交哈希,并将其合并到你当前所在的分支中(也许是主)

    git merge HEAD@{1}

    这样的东西

    你也可以git rebase -i并从reflog中“选择”你想要的提交。

        
    68
    2011-05-18 17:31:58Z
    1. git cherry-pick {hash}似乎也可以工作
      2013-08-14 20:32:51Z
    2. 醇>

    在做了一些工作之后,我处于类似的状态:

       Lilith:经理KelSolaar $git status      

    目前不在任何分支上。

    我发布了一个 git log 来查看我的上次提交哈希:

      

    Lilith:经理KelSolaar $git log

         

    提交49984303037e970d637161c3154b7fd7d6ae3a43   作者:KelSolaar   日期:2011年10月5日星期三22:41:31 +0100

     
    Introduce new "QObject" components category and rename existing ones to "Def
    

    然后我检查了我的主分支:

       Lilith:经理KelSolaar $git checkout master      

    以前的HEAD位置是4998430 ...引入新的“QObject”组件类别,并将现有的组件重命名为“Default”和“QWidget”。

         

    切换到分支'master'

    我最后使用提交哈希合并:

      

    Lilith:经理KelSolaar $git merge 49984303037e970d637161

         

    更新141bc69..4998430

         

    快进

         

    src /manager /component.py | 2 + -

         

    ...

        
    11
    2011-10-05 22:00:44Z

    git checkout -会将您切换回上一个分支:

     
    Thu Feb 21 12:50 AM /src/test ((08f84f4...)) $ git checkout master
    
    Warning: you are leaving 1 commit behind, not connected to
    any of your branches:
    
      08f84f4 Fix everything
    
    Switched to branch 'master'
    
    Thu Feb 21 12:50 AM /src/test (master) $ git checkout -
    
    HEAD is now at 08f84f4... Fix everything
    
    Thu Feb 21 12:50 AM /src/test ((08f84f4...)) $
    
        
    9
    2013-02-21 08:52:56Z
    1. 我认为这是最好的答案。另外值得一提的是,您可以检查您当前的分支h使用git branch
      2014-06-18 16:50:38Z
    2. 这用最简单的解决方案回答了问题。 git checkout -(再次突出显示)
      2015-05-20 15:19:00Z
    3. 醇>

    你的提交没有消失,你可以通过让git向你显示隐藏的提交来恢复,并将它们放回临时分支。

    有关说明,请参阅此答案

        
    2
    2017-05-23 11:47:32Z
    1. 在这种情况下比这更容易,因为reflog将有提交 - manojlds的回答描述了这一点。
      2011-05-18 18:42:12Z
    2. 敬意赞成
      2011-05-18 18:45:37Z
    3. 醇>

    使用“git reflog”它会显示git命令历史记录结果的提交哈希值。 然后你可以“git co hash”,当你找到合适的那个时,设置/为它做一个分支。

        
    1
    2011-05-19 06:04:41Z

    你永远不会“不在任何一个分支上”。您可能已经在master的分支上,但是当您提交时,您在某个分支上。所以提交是在某个地方。

    使用git log查看历史记录。您可以使用git reset及时返回(包括,可选地,将更改保留在工作目录中)。

        
    - 5
    2011-05-18 17:22:22Z
    1. 这是错误的 - 你可以不在分支上。此状态称为“分离的HEAD”,因为HEAD指向特定提交的哈希而不是分支名称。您使用分离的HEAD进行的任何提交都不会推进分支提示,但仍可通过reflog访问一段时间。
      2011-05-18 18:37:37Z
    2. 不正确。现在“$git status”给了我“#目前不在任何分支上。” (而不是通常的“#On branch master”),然后是“#changes to be committed:”等。
      2012-01-21 00:50:56Z
    3. 醇>
来源放置 这里