web-dev-qa-db-ja.com

Gitがブランチをマスターにリベースできませんでした。解決方法は?

私はリモートgitリポジトリのローカルコピーに取り組んできました。ローカルコピーにブランチを作成しました。これを「my_branch」と呼びましょう。 my_branchで数回コミットしました。

最近、「my_branch」をリモートにプッシュしました。しかし、誰かがリモートマスターにバージョンを追加したことを知りませんでした。それで、私はそれを私の地元のマスターに持ってきました。

つまり...簡単に言うと、私のローカルリポジトリは次のようになります(ダイアグラムの規則を使用しようとしています ここ )。

 --C0--------------C7--  (local master)
      \
       --C1-C2-C3--     (local my_branch)
             \
              --C4-C5-C6--     (local sandbox_branch)

私はそれを次のように見せたいです:

 --C0--------------C7--  (local master)
                      \
                       --C1'-C2'-C3'--     (local my_branch)
                             \
                              --C4'-C5'-C6'--     (local sandbox_branch)

My_branch ONTOローカルマスターをリベースしようとしましたが、次のエラーメッセージが表示されました(GitXというgitのビジュアルツールを使用しています)。

Rebase Failed!
There was an error rebasing HEAD with branch 'master'.

command: git rebase refs/heads/master

It seems that I cannot create a rebase-apply directory, and
I wonder if you are in the middle of patch application or another
rebase.  If that is not the case, please
    rm -fr /my_project_directory/.git/rebase-apply
and run me again.  I am stopping in case you still have something
valuable there.

何が悪いのですか?これをどのように処理すればよいですか?コマンドラインでこれを行うとしたら、上の図の状態にするためのコマンドは何ですか?

UPDATE 1

ところで、私はアプリケーションパッチや別のリベースの最中ではありません...少なくとも意図的ではありません。プッシュした後にリモコンが更新されたことを知った後、フェッチを実行しました。それは、GitXに私がアプリケーションパッチまたは別のリベースの最中であると思わせるために何かをしたでしょうか?

また、図をより正確にするために更新しました。 my_branchから分岐があります。私はそれを元の質問に含めませんでしたb/c私はそれが問題になるとは思いませんでした。念のため含めています...

更新2

参考までに...「ローカル」と「リモート」のマスターツリーは、sandbox_branchがないことを除けば、私が描いた図のように見えます。

17
milesmeow

gitrebaseが.git/rebase-applyディレクトリを検出したため、リベースの途中である可能性があります。これは、前のリベース中に競合が発生し、リベースが終了しなかった場合に発生します。つまり、git rebase --abortgit rebase --skip、またはgit rebase --continue(競合を解決した後の最後のもの)のいずれも実行していません。

とにかく、git rebaseをまったく実行しなかったと思っていれば、どのようにしてこの状態になったかは関係ありません。ヘルプが示唆するように単にrm -fr /my_project_directory/.git/rebase-applyすれば、今すぐリベースを実行できるはずです。

ちょっと待って。ブランチをリモートリポジトリにすでに公開していると言っているので、マスターをそのリポジトリにリベースしようとしないでください。実際、リモートが非早送りコミットを拒否するように設定されている場合(これは一般的に推奨されるベストプラクティスのようです)、リベースされた変更をリモートにプッシュすることさえできません。一般に、リモートに公開した後でコミットを変更しようとすることはお勧めしません(git rebaseが行うことです)。

33