質問: ![](https://teratail.storage.googleapis.com/uploads/contributed_images/c3e94c61a009a10e964d35598492b95e.png) 上記の画像は、developブランチにいる状態でmasterブランチをリベースした直後の画像です。 リベースというのは、歴史を一本化してくれるコマンドらしく、developブランチとmasterブランチを統合しようとしています。 mergeコマンドとの違いは、mergeの場合は、基準とするブランチにチェックアウト(masterの後に続いてdevelopを適応させたければmasterブランチに移動して marge developのようにする)しますが リベースの場合は、もしmasterの後にdevelopの歴史を一本化したければ、まずはdevelopに移動して、git rebase developのようにしますよね。そこでコンフリクトが発生するので、コンフリクトを治す。 そしたら、git rebase --continueする。ここから少しわからないんですが、この後僕はどうすれば良いんでしょうか。下記の参照urlによればコンテニューした後は、masterにチェックアウトして git marge developのようにしれ見れば、歴史が一本に繋がると書いてあります。 しかし、git rebase --continueした後にmasterにチェックアウトしようとすると、下記のようにエラーが発生してしまいます。 ``` new.txt: needs merge error: you need to resolve your current index first ```
回答: ちょっと言葉の定義が怪しいようですので,整理しましょう. チェックアウト: 指定したコミットへ `HEAD` を移動すること.そこにブランチがあり,チェックアウトでブランチを指定していると *ブランチをチェックアウトした* 状態になる.実際のファイル群は(ステージされていない変更等一部を除いて)チェックアウトしたコミットの状態になる > > mergeの場合は、基準とするブランチにチェックアウトしますが > > > mergeの場合は,基準とするブランチ(チェックアウトしているブランチの意?)に対象のブランチを取り込む(マージする)が正しい表現です. 下の図は,ブランチB をチェックアウトしている状態でブランチAをマージ `git merge A` した時の図です. !イメージ説明 > > リベースの場合は、もしmasterの後にdevelopの歴史を一本化したければ、まずはdevelopに移動して、git rebase developのようにしますよね。 > > > リベースも,どちらのブランチを基準にするかで結果が変わっていきますが, `まずはdevelopに移動して、git rebase develop` のように同じブランチをrebaseすることはありません. masterに移動して `git rebase develop` か developに移動して `git rebase master` です. そして本題ですが, > > そしたら、git rebase --continueする。ここから少しわからないんですが、この後僕はどうすれば良いんでしょうか。 > > > SourceTreeのコミットグラフを見るに,コンフリクトを解消した後にコミットされていないようにみえます. 1. `git rebase master` を実行する 2. コンフリクトが起きたら修正 3. コンフリクトの修正をコミット 4. git rebase --continue 5. 3-4はコンフリクトが全て解消するまで繰り返す の手順で(特に3が)抜けているものはないでしょうか? なお,rebaseがうまく行かずにキャンセルする場合は `git rebase --abort` する必要があります