【Git】リベース(Rebase)

【Git】リベース(Rebase)図解 R
PR
PR

リベース(Rebase/Git)とは、バージョン管理システムのGitにおいて、あるブランチで重ねた変更の記録を、別の地点の上に付け替えて並べ直す操作のことです。作業用のブランチを本流の最新の状態に追いつかせたり、変更の履歴を一本の線のように整えたりするために使われます。

現実世界に例えると、リベースは古い版の原稿に書き込んだ自分の修正メモを、最新の版の原稿に一枚ずつ貼り直すことのようなものです。修正の中身は同じでも、最新の版を土台にした形になるので、あとで本の原稿にまとめるときに迷いません。

リベース(Rebase)図解

【Git】リベース(Rebase)図解
※画像をクリックすると拡大表示します。

土台を付け替えるという意味

名前の由来です。「ベース」は作業用のブランチが枝分かれした元の地点を指し、リベースはその土台を、本流の新しい地点へ付け替えることを意味します。Gitは、自分のブランチの変更をいったん取り外し、新しい土台の上で1つずつやり直すことで、付け替えを実現しています。

マージとの違い

よく比べられる操作です。マージは2つの流れを合流させた記録を新たに残すのに対し、リベースは記録そのものを並べ直して、合流がなかったかのような一本の履歴にします。どちらも変更を取り込むという目的は同じで、履歴の残し方が異なります。

項目 マージ リベース
履歴の形 枝分かれと合流が残る 一本の線に整う
既存の記録 そのまま残る 作り直される
共有済みのブランチ 安全に使える 原則として使わない
向いている場面 作業の経緯を残したいとき 履歴を見やすくしたいとき

履歴が見やすくなる

使われる理由です。マージを繰り返すと、合流の記録が増えて履歴が入り組み、どの変更がいつ入ったのかを追いにくくなります。リベースで整えておけば、変更が順番に一列で並ぶため、あとから履歴を読む人にとって分かりやすくなります。不具合の原因となった変更を探すときにも役立ちます。

記録をまとめ直せる

応用的な使い方です。対話的にリベースを行うと、細かすぎる記録を1つにまとめる、記録の説明文を書き直す、順番を入れ替えるといった整理ができます。作業中に重ねた「修正」「再修正」のような記録を、プルリクエストを出す前に意味のある単位へ整えておくと、確認する人も読みやすくなります。

共有したブランチでは使わない

いちばん大切な決まりです。リベースは記録を作り直すため、すでにプッシュしてほかの人も使っているブランチで行うと、相手の手元の履歴と食い違い、大きな混乱を招きます。リベースは、まだ自分しか使っていないブランチに限って使うというのが、広く守られている原則です。

途中でコンフリクトが起きたら

作業中の対処です。リベースは変更を1つずつやり直すため、その途中で本流の変更とぶつかると、そのたびに止まってコンフリクトの解決を求められます。直したら続きを進める指示を出し、うまくいかないときは、リベースを中止して始める前の状態に戻せます。焦らず1つずつ解決するのがこつです。

リベースのあとのプッシュ

注意したい点です。一度プッシュした自分のブランチをリベースすると、リモートの記録と手元の記録が食い違うため、通常のプッシュは拒否されます。この場合は上書きのプッシュが必要になります。自分だけのブランチでも、上書きの前には、ほかの人が使っていないかを確かめましょう。

プルと組み合わせる

身近な使い方です。リモートの変更を取り込むプルの操作で、マージの代わりにリベースを使うよう指定できます。こうすると、自分のまだ送っていない変更が、リモートの最新の変更の後ろに並び直されます。余計な合流の記録が増えないため、チームでこの方法を標準にしている例も多くあります。

あわせて知っておきたい用語

コメント

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