有3個提交 - 一個正確的,然後兩個愚蠢的清理,錯別字等。所以我想壓扁他們。火種:「fatal:ref HEAD is not a symbolic ref」在交互式git rebase中
git rebase -i HEAD~3
聽起來很簡單,它應該工作 - 我已經運行到一個問題,在一個全新的回購之後試了一下,它按預期工作。編輯器顯示3個提交,挑選頂部,擠壓其他兩個,保存並退出,完成。如果我在詳細模式下運行,我會看到更多細節 - git通過檢出我選擇的第一個提交進入分離的HEAD狀態,然後執行「Rebasing 2/3」和「Rebasing 3/3」,顯然創建了一些臨時提交一路走來 - 然後一個成功的消息;編輯器在某個時候再次彈出,讓我改變提交信息。一切都很好。
但是同樣的命令在工作回購中死亡! 3在一個編輯器中提交,選擇squash-squash ..但是這一次,我沒有看到'Rebasing 2/3',而是'HEAD現在在我的-Sha-1'之後的第一行,它遇到了致命!
HEAD is now at 48a6c3d... <commit message>
fatal: ref HEAD is not a symbolic ref
但爲什麼會 git的期望HEAD是一個象徵性的裁判? Rebase過程會分離HEAD - 就像我在我的探索性示例中看到的那樣 - 那麼爲什麼在第二個示例中致命但不是在第一個示例中? cat .git/HEAD給我我已經選擇的提交的SHA1 ...
我花了好幾個小時閱讀和研究,但有些東西只是不在這裏,我找不到它是什麼!我懷疑也許一些鉤子負責(知之甚少,並知道有問題的回購確實有一些)。感謝您考慮回答這個問題!
如果您認爲掛鉤可能是個問題,您是否嘗試關閉掛鉤?它們位於'.git/hooks /'下,只需將它們重命名爲' .off'。有一個預先rebase的鉤,特別是'pre-rebase.sample'。 –
2013-08-07 14:28:08
感謝您的建議 - 鉤子現在有些神祕化了..它對問題沒有任何影響,但至少殺死了一條紅色鯡魚) – alexakarpov
Git中的符號引用與文件系統上的符號鏈接無關: 「Git」中的「ref」是一個指向提交的實體 - 分支或標籤;這是「參考」的簡稱。一個ref可能直接指向一個提交(然後直接)的SHA-1名稱或另一個* ref,然後它是「符號」。例如,'HEAD'通常指向'refs/heads/master',而不是主人的提示提交。 – kostix