为什么我的Git仓库进入分离的HEAD状态?

我今天结束了一个分离的头,同样的问题,描述在: git推说,一切都是最新的,即使我有本地变化

据我所知,我没有做任何异乎寻常的事情,只是承诺,从我当地的回购推动。

那么我是如何结束了一个detached HEAD

任何一个不是分支名字的提交结账都会让你有一个分离的HEAD。 表示分支尖端的SHA1仍然会给出分离的HEAD。 只有本地分行名称的结帐才能避免该模式。

请参阅提交分离的HEAD

HEAD分离时,提交工作正常,除非没有命名分支更新。 (你可以把它看作一个匿名分支。)

替代文字

例如,如果你签出一个“远程分支”而没有先跟踪它,你可以结束一个分离的HEAD。

参见git:切换分支而不分离头部

我刚刚转载了这个意外:

  1. 列出远程分支

     git branch -r origin/Feature/f1234 origin/master 
  2. 我想结账一个本地,所以我剪贴:

     git checkout origin/Feature/f1234 
  3. 普雷斯托! 分离HEAD状态

     You are in 'detached HEAD' state. [...]) 

解决scheme#1:

检查出来的时候不要在我的分支规范的前面加上origin/

 git checkout Feature/f1234 

解决scheme2:

添加-b参数,从远程创build一个本地分支

git checkout -b origin/Feature/f1234或者

git checkout -b Feature/f1234它会自动回落到原点

如果您试图通过重新签出文件来取消所做的更改,而不是完全正确地使用语法,则很容易发生。

你可以看看git log的输出 – 你可以在上次成功提交后粘贴git log的尾部,我们都可以看到你做了什么。 或者你可以粘贴它,并在freenode IRC的#git很好地提问。

尝试

 git reflog 

这给你一个你的HEAD和分支指针在过去如何移动的历史。

例如:

88ea06b HEAD @ {0}:checkout:从开发转移到遥控/起源/ SomeNiceFeature e47bf80 HEAD @ {1}:pull origin开发:快进

这个列表的顶部是一个reasone,可能会遇到一个DETACHED HEAD状态…检查一个远程跟踪分支。

另一种进入git detached head状态的方法是尝试提交到远程分支。 就像是:

 git fetch git checkout origin/foo vi bar git commit -a -m 'changed bar' 

请注意,如果你这样做,任何进一步尝试检出origin / foo将使你回到分离的头状态!

解决方法是创build自己的本地foo分支,跟踪origin / foo,然后可以select推送。

这可能与您的原始问题没有任何关系,但是这个页面在谷歌命中“git detached head”很高,而且这种情况严重不足。

一个简单的偶然的方法是做一个git checkout head作为git checkout head的错字。

尝试这个:

 git init touch Readme.md git add Readme.md git commit git checkout head 

这使

 Note: checking out 'head'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 9354043... Readme 

如果您有一个与分支名称相同的标签,就会发生这种情况。

例如:如果“release / 0.1”是标签名称,那么

 git checkout release/0.1 

在“release / 0.1”产生分离的HEAD。 如果你期望release / 0.1是一个分支名字,那么你会感到困惑。