枝分かれした複数の作業ブランチを統合することができる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の履歴が壊れる可能性があるため絶対に使用してはいけません。