13

3 つのコミットを取得しました。撃退:

git rebase -i HEAD~3

シンプルに聞こえますが、うまくいくはずです-問題が発生した後、新しいレポで試してみましたが、期待どおりに動作します。エディターに 3 つのコミットが表示されます。一番上を選択し、他の 2 つを押しつぶして保存し、終了します。詳細モードで実行すると、詳細が表示されます-gitは、「選択した」最初のコミットをチェックアウトすることにより、切り離されたHEAD状態に入り、次に「2/3のリベース」と「3/3のリベース」を実行し、明らかにいくつかの一時コミットを作成します途中で -- そして成功メッセージが表示されます。ある時点でエディターが再びポップアップし、コミット メッセージを変更するように勧められます。大丈夫です。

しかし、同じコマンドが作業レポで死にます! エディターで 3 つのコミット、pick-squash-squash ..しかし、今回は「Rebaseing 2/3」が表示されず、代わりに「HEAD is now at my-SHA-1」の後の最初の行で実行されます。致命的!

HEAD is now at 48a6c3d... <commit message>
fatal: ref HEAD is not a symbolic ref

しかし、なぜgit は HEAD がシンボリック参照であることを期待するのでしょうか? リベース プロセスは HEAD をデタッチします - 私の探索的な例で見たのと同じです。cat .git/HEAD 「選択した」コミットのSHA1を教えてください...

私は何時間もかけて本を読んだり調べたりしましたが、何かがおかしいので、それが何かを見つけることができません! おそらくいくつかのフックが原因であると思われます(それらについてはほとんど知らず、問題のあるレポにいくつかあることを知っています)。ご検討いただきありがとうございます。

4

2 に答える 2