GitのRebase(リベース)でブランチを統合する方法|Gitやばい辞典

それは、突然やってくる。
この記事では、GitのRebase(リベース)でブランチを統合する方法を、VSCodeとコマンドライン(以下、コマンド)の両方で解説します。
Gitを覚えるのがつらい。でも、いざという時にGitが使えないのはやばい。どうせ覚えないといけないなら、さっさとマスターするのが吉。そんな現場ですぐに役立つGit実践集。それが「Gitやばい辞典」です。
この記事でやること
目標

Rebaseのイメージを理解し、2つのブランチをRebaseを使って1本に統合できるようになる。
目次
Rebaseでブランチを統合する方法
GitのRebase(リベース)は、枝分かれしたブランチを統合し、履歴を一直線に整える機能です。これを使うことで、余計なマージの跡を残さず、まるで最初から最新状態で作業していたかのような美しい一本道のログを作ることができます。

今回はこちらをRebaseしていきたいと思います。

リベース元のブランチにいる状態で、リベース先(コミット3)を右クリックして「Rebase current branch on this Comment」をクリックします。

確認ダイアログが表示されるので「Yes, rebase」をクリック。
git rebase mainコマンドの場合は、developブランチに移動してこちらを実行します。
1つ目のコンフリクト
Rebaseはコミットの数だけ競合の解決が発生する可能性があります。そのルールをしらないと戸惑うことになります。ここからは、Rebaseで競合してしまった時の対処法を解説です。

Rebaseで競合が発生するとこんなメッセージが表示されるかと思います。しかし、焦る必要はまったくありません。

コマンドの場合はこんな感じ。同じエラーが表示されていますね。

ログによると、「コミット1develop」を「コミット1 develop'」に移動&統合した際に競合が発生したようです。

というわけで、マージエディタで競合を解決します。
※マージの方法は割愛します

マージエディタで競合を解決すると自動的に「add」されステージングされます。

この状態でコミットメッセージを変更して「続行」をクリック。
git rebase --continueコマンドの場合はこちらでリベースを続行します。
git rebase --continue の中身
- コミットメッセージの編集: コミットメッセージの編集状態で待ち状態になる(初期値はリベース元と同じもの)
- コミットの実行:
git commitを実行する(addは含まないので自分で行う必要がある) - モードの解除: 「リベース中」のフラグを削除し通常モードに戻す
※--continueはどれもこの仕様
そうなんです。「git rebase --continue」はコミットメッセージの作成からコミットまで行ってくれているんですね。
なので、マージ後の「git commit -m "ホゲホゲ"」みたいなことはしなくてよいということになります。
これさえ知っていればリベース競合なんて何も怖くありませんね。
Vimが起動するので、コミットメッセージを修正して「wq」を実行。
これで、1つ目のコンフリクトは完了です。
2つ目以降のコンフリクト(繰り返し)

1つ目が完了すると、すぐに次のコンフリクトに移動します。

ログをみると、1つ目と同様に「コミット2develop」を「コミット2 develop'」に移動&統合した際に競合が発生したようです。
あとは、1つ目と同じ作業を繰り返します。
すべてのコンフリクトが解消

すべてのコンフリクトが完了すると「Succsessfully rebase and updated」というメッセージとともにリベースも完了します。

このとおり、コミット履歴がきれいに一列に並びました。
Rebaseをキャンセルする方法

Rebaseはいつでもキャンセルが可能です。上は1つ目のコンフリクトを解消し2つ目のコンフリクトが表示された状態です。
git rebase --abortここで、「--abort」を実行します。

すると、何事もなかったかのように元の状態に戻ります

