2012-01-08 10 views
8

私はリモートgitリポジトリのローカルコピーに取り組んできました。 ローカルコピーにブランチを作成しました。それを 'my_branch'としましょう。 私はmy_branchに数回コミットしました。Git rebase masterへのブランチが失敗しました。どうすれば解決できますか?

私は最近、リモートに 'my_branch' を押しました。しかし、私は誰かがリモートマスターにバージョンを追加したことを知らなかった。だから私はそれを私のローカルマスターに持ってきました。

だから... ...長い話を短く、私の地元のレポは、(私はdiagraming大会hereを使用しようとしている)、このようになります。私は地元のマスターONTO my_branchをリベースしてみましたが、私は(私はGitXと呼ばれるgitのためのビジュアルツールを使用しています)、このエラーメッセージが表示されました

--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) 

は、私は次のようにそれを見てみたい

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が私がアプリケーションパッチや別のrebaseの真中にいると思うようにするために何かをしたことがありますか?

また、図をより正確に更新しました。 my_branchの分岐があります。私は元の質問にそれを含めなかった。私はそれが重要ではないと思った。私は2

FYI

UPDATE ...念のために含めています...それはdoesnのを除いて「ローカル」用と「リモート」のマスターの木は、私が描いた図のようになります。 sandbox_branchがあります。

+0

'git rebase --abort'を試しましたか? –

+0

"rebase-applyディレクトリを作成できないようですが、 パッチ適用の途中であるか、別の rebase" < - これがこの場合ですか? – fge

+0

@fge。良い質問。私は説明を更新しました。 – milesmeow

答えて

24

Gitのリベースは.git/rebase-applyディレクトリを見つけたので、あなたがリベースの真ん中にあるかもしれないことを前提としています。これは、以前のリベース中に競合があり、リベースが完了していない場合に起こりました。つまり、git rebase --abort,git rebase --skipまたはgit rebase --continueのいずれかを実行していない(競合を解決した後の最後のもの)。

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

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

+0

あああ...だから私は何をすべきですか?私はgitにとってかなり新しいです。最初は 'git rebase --abort'ですか?参考までに...「ローカル」と「リモート」のマスターツリーは、私が描いた図のように見えますが、sandbox_branchはありません。 – milesmeow

+0

私は潜在的に私の変更をローカルにマスターにマージすることができたと思います...そして、リモートにプッシュ...行く方法ですか? – milesmeow

+0

これらの変更をリモートマスタに公開しますか?はいの場合は、ブランチをマスターにマージし、リモートにプッシュする必要があります。 masterからの最新の変更もブランチの一部であることを確認したい場合は、masterをローカルブランチにマージし、リモートにプッシュします。 –

関連する問題