3つのコミットがあります.1つは適切です。そして2つは愚かなクリーンアップ、タイプミスなどです。火気:対話型git rebase中に "致命的:ref HEADは象徴的な参照ではありません"
git rebase -i HEAD~3
は簡単に聞こえる、それが動作するはずです - 私はブランドの新しいレポで、問題に実行した後、それを試してみた、と期待どおりに動作します。エディタは3つのコミットを表示し、トップを選択し、他の2つをスワッシュし、保存して終了します。私が冗長モードで実行すると、詳細が表示されます - gitは1回目のコミットをチェックアウトしてHEAD状態に入り、その後Rebasing 2/3とRebasing 3/3を実行します。道に沿って - 成功メッセージ。ある時点でエディタが再びポップアップし、コミットメッセージを変更するように指示します。すべてが良いです。
しかし、同じコマンドが作業リポで死にます! 3はエディタのpick-squash-squash ..でコミットしますが、今回は「Rebasing 2/3」と表示されず、「HEAD is now-SHA-1」の後の最初の行が表示されます。致命的な!
HEAD is now at 48a6c3d... <commit message>
fatal: ref HEAD is not a symbolic ref
しかし、なぜ GitはHEADがシンボリックrefのことを期待するでしょうか? RebaseプロセスはHEADを切り離します - 私の探索的な例で見たのと同じです - この2番目の例では致命的ですが、最初の例では致命的なのはなぜですか? cat .git/HEAD私が '選択したコミットのSHA1を教えてください...
私は数時間にわたり読書して研究していますが、ここには何かがありません。私はかもしれないと思われます。いくつかのフックが責任があります(問題のあるレポにはいくつかのことが分かっています)。これにご回答いただきありがとうございます。
フックに問題があると思われる場合は、フックをオフにしましたか?それらは '.git/hooks /'の下にあり、 '.off'に名前を変更するだけです。特にpre-rebase.sampleというプレリベースフックが1つあります。 –
提案に感謝 - フックは今やいくらか解明されていますが、問題には何の影響もありませんでしたが、少なくともそれは赤いニシンを殺しました) – alexakarpov
Gitの "symbolic ref"はファイルシステム上のシンボリックリンクとは関係ありません: Git用語集の "ref"はコミットを指す実体で、ブランチやタグです。これは「参照」の略です。 refは、コミットのSHA-1名を直接指し示すかもしれません(それは直接的なものです)。あるいは、別の* refにして、それを "記号的"にします。例えば、 'HEAD'は通常、' refs/heads/master'のようなものを指します。マスターのチップコミットには向いていません。 – kostix