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

WEB制作の現場で本当に起きる現場で知らないと本当に困る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 の中身

  1. コミットメッセージの編集: コミットメッセージの編集状態で待ち状態になる(初期値はリベース元と同じもの)
  2. コミットの実行: git commit を実行する(addは含まないので自分で行う必要がある)
  3. モードの解除: 「リベース中」のフラグを削除し通常モードに戻す

--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」を実行します。

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