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