ブランチの変更を統合して履歴を整える~rebase リベース~

GitHub

枝分かれした複数の作業ブランチを統合することができるrebaseコマンド

似ているmergeコマンドとの違いについてもご紹介

rebaseコマンドの使い方

git rebase ブランチ名
指定したブランチの変更を取り込んで統合することができる。また、ただ統合するだけではなく履歴を整える役割も持つ。

下記コマンドは現在の作業ブランチにmainブランチの変更と履歴を取り込むことができる。

git rebase main

rebaseとmergeの違い

リベースとマージの違いについて解説します。

上司が神経質でめんどくさい人でなければマージを使えばいいですが、履歴がキレイであれば見やすいというメリットもあります。

ブランチを統合したときの流れを簡単に理解しておきましょう。

前提条件
・ブランチはコミット1から派生したmainブランチとhogeブランチがある。
・mainブランチのコミット2の変更をhogeブランチのコミット3に取り込みたい。

mergeの流れ
マージする前
マージ後

親のコミットとしてコミット2とコミット3の二つを持つコミット4が新しく作成されます。

履歴が枝分かれしているので何度もマージを利用していると徐々に履歴が見にくくなってしまう。

rebaseの流れ
リベースする前

横向きになってますがマージする前の画像と同じ構成になっています。

リベース後

コミット1に紐づいていたコミット3は無くなり、コミット3’として新たに作成されています。

この時、参照している親コミットはコミット2となり、一列に並ぶことでマージに比べて後から履歴が見やすくなる。

リベースを試してみる

下準備として新規でfeatureブランチを作成して、mainブランチとfeatureブランチにそれぞれブランチ名と同じhtmlファイルを作成していく。

最初にfeatureブランチにmainブランチの変更を取り込む。

$ git rebase main
Successfully rebased and updated refs/heads/feature.
※コードの見方
黄・・・入力したコマンド
青・・・ログインユーザー
紫・・・コメント
その他・・・コマンドのレスポンス

rebase(リベース)の注意点

リベースを利用するには注意点があります。

GitHubにプッシュしたコミットをリベースするのはNG

すでにプッシュしたコミットをリベースしてしまうと履歴が変更されてしまいます。

履歴が変更されたコミットを再度プッシュしようとしてもGitHub側が認識できなくなりプッシュできなくなってしまいます。

また、プッシュができなくなったときでも強制してプッシュできるコマンドがあります。

git push -f

このコマンドはプッシュを強制することができますがGitHubの履歴が壊れる可能性があるため絶対に使用してはいけません。

タイトルとURLをコピーしました