2012-05-07 10 views
8

私のレポにgit rebase --interactiveをやろうとすると深刻な問題があります。私は秘密のエラーfatal: ref HEAD is not a symbolic refを取得し、私のrebaseは機能しなくなります。私は良い状態に戻るためにgit rebase --abortする必要があります。ここで私はrebaseできません - 対話的なもう

は私が受け取る出力(s)は、次のとおりです。https://gist.github.com/d38f1e2d2ec9bc480b6f

私は過去に言われてきたが、これは私が「デタッチHEAD」モードにいるという事実によるものであるが、どのようになることです私がそのモードにいたのであれば、私は最初にリベースに入ったのですか?私は最も確かにmasterで始まり、次にgit rebase --interactiveを実行し、git-rebase-todoテキストファイルを私が望むものに変更します。そして、このエラーが発生します。

私はここで働いている人に尋ねましたが、いくつかの人々はfreenodeで話しました。誰も私の問題を本当に理解していないか、解決策が何であるかを知っているようです。そのエラーのためのグーグルは何ももたらさなかった、StackOverflowに関する関連する検索は何も証明しなかった。私はこれを理解しているようには思えません。それは、私が自分の別のコミットとして行うすべての小さな変更を押し進めるまで、私が習得しようとするすべてのコミットを押しつぶすことから、本当に不自由です。

+0

ここで、succezsfullリアーゼ-iについて説明する:http://davidstechtips.com/2011/03/collapsing-commits-in-git/。あなたのケースでは、 'git checkout master '、 '8bbfbba'のようにしてみてください。あるいは、紛争の後、 'git rebase --continue'をやっていない? – VonC

+1

ヘッドの再処理中にヘッドを取り外す以前のリベースにまだ入っている可能性があります。これは、現在のインタラクティブなステップを修正する熱の大きなリベース中に簡単に発生する可能性があり、気を散らす可能性があります。私はちょうど私が(多くの小さなステップ)多くの仕事をしていたが、私は迷子にならなかったので、それぞれのステップごとに別々の 'rebase -i'をやり終えたところで、リベースを行ってきました。 git-guiとgitk visualiserを起動すると同様に役立ちます。 [自分のローカル支店の1つで始まっていることを確かめてください] –

+0

'.git/HEAD'の内容を見ることで実際に分離されたHEADモードになっているかどうかを確認することができます。" ref:refs/heads/... "あなたは分離HEADモードではありません。一方、SHA-ID(文字や数字のぎりぎりの文字列など)が含まれている場合は、HEADモードになっています。 –

答えて

3

'git rebase'の実行中に、リベースしているrefがチェックアウトされています。そのrefがコミットであれば、分離した頭を得るでしょう。ブランチ参照の場合は、そのブランチがチェックアウトされます。コミット中にFATALが発生した場合は、作業ディレクトリをmunged状態で残します。たとえば、ブランチFoo上にあってBarをリベースしようとした場合、FATALの後に、Barにかかったり、Barの後にリベースコミットをいくつか適用したりします。 Fooを簡単にチェックアウトすることで回復します。

git rebase --abort 

または、リベースが本当に挟まれている場合(下記参照を参照)、よう:

その後
git checkout -f Foo 

、あなたは安全にFATALが発生した理由をデバッグしようとするために、再度リベースを試すことができます。 Hereは、メモリ不足時にリベースが失敗し、 'git rebase --abort'が動作しない場合です。

+1

'git checkout -f'を使っても私の問題は解決しません。私はいつもrebaseから抜け出すために 'git rebase --abort'をやっています。 'git checkout -f'を試してみると、次のようになります。https://gist.github.com/4d3aa867602f1e438e9b – tubbo

+0

これは私の' git-tracker'の使用によるものです。ごめんなさい!! – tubbo

+0

'git rebase --abort'を使うのが望ましいアプローチです。それは必ずしも機能しません(参考文献を参照) – GoZoner