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

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

Rebaseのイメージを理解し、2つのブランチをRebaseを使って1本に統合できるようになる。
目次
Rebaseでブランチを統合する方法
Amendは直前のコミットメッセージを変更することができます。それ以外のコミットメッセージを変更したい場合は、次のRebase(reword)を使います。
ちなみに、Amendとは、憲法の修正などにも使われる『不備を正して、より良い形に改める(是正する)』という意味があります。

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

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

確認ダイアログが表示されるので「Yes, rebase」をクリック。
git rebase mainコマンドの場合は、developブランチに移動してこちらを実行します。
1つ目のコンフリクト
ここから、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」を実行します。

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

