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
或者,可以
git checkoutgit checkout -b new_branch_name
然后合并分支。
Git的使用参考: