2013-08-07 132 views
6

有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 ...

我花了好幾個小時閱讀和研究,但有些東西只是不在這裏,我找不到它是什麼!我懷疑也許一些鉤子負責(知之甚少,並知道有問題的回購確實有一些)。感謝您考慮回答這個問題!

+1

如果您認爲掛鉤可能是個問題,您是否嘗試關閉掛鉤?它們位於'.git/hooks /'下,只需將它們重命名爲' .off'。有一個預先rebase的鉤,特別是'pre-rebase.sample'。 – 2013-08-07 14:28:08

+0

感謝您的建議 - 鉤子現在有些神祕化了..它對問題沒有任何影響,但至少殺死了一條紅色鯡魚) – alexakarpov

+1

Git中的符號引用與文件系統上的符號鏈接無關: 「Git」中的「ref」是一個指向提交的實體 - 分支或標籤;這是「參考」的簡稱。一個ref可能直接指向一個提交(然後直接)的SHA-1名稱或另一個* ref,然後它是「符號」。例如,'HEAD'通常指向'refs/heads/master',而不是主人的提示提交。 – kostix

回答

0

您的「工作」回購可能以某種方式破裂。詳細信息請參見I can't git rebase --interactive anymore

我想嘗試在您的工作回購庫中運行git status來弄清楚發生了什麼。然後例如git rebase --abortgit merge --abort或類似的東西可能是必需的。我也會運行git fsck

當您的回購和工作目錄很好後,交互式底座應該可以正常工作。另外請注意,如果您想要觸摸回購中的第一次提交,您可能需要git rebase --root --preserve-merges ...

相關問題