git detached

git提交的时候,本地已经提交,却怎么也推送不到服务器,也没显示错误,只显示 everything-up-to-date ;

原因是git不在master分支,而是处于detached head(匿名分支提交)状态,即git Head指向了其中一个提交,而不是master分支,所以,在detached HEAD里面做的任何操作,例如提交操作,都可以正常进行,但是不会更新任何已命名的分支。(你可以认为这是在更新一个匿名分支。)

一旦此后切换到别的分支,比如说master,那么这个提交节点(可能!!!如果使用了git gc,那就没了:-( )再也不会被引用到,然后就会被丢弃掉了。

如果要保存这个匿名分支,可以把它新建为一个新的分支,使用

git checkout -b new_branch_name 

其实,使用git checkout的好处多多 , 如果既没有指定文件名,也没有指定分支名,而是一个标签、远程分支、SHA-1值或者是像master~3类似的东西,就得到一个匿名分支,称作detached HEAD(被分离的HEAD标识)。这样可以很方便地在历史版本之间互相切换。比如说你想要编译1.6.6.1版本的git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout master。

上面的问题可以这样解决:

$ git log -1
# note the SHA-1 of latest commit
$ git checkout master
# reset your branch head to your previously detached commit
$ git reset --hard <commit-id>

 或者,可以

git checkout <commit-id>
git checkout -b new_branch_name 

然后合并分支。

Git的使用参考:http://www.cnblogs.com/trying/archive/2012/06/04/2863745.html

原文地址:https://www.cnblogs.com/trying/p/3437792.html