リベース(Rebase/Git)とは、バージョン管理システムのGitにおいて、あるブランチで重ねた変更の記録を、別の地点の上に付け替えて並べ直す操作のことです。作業用のブランチを本流の最新の状態に追いつかせたり、変更の履歴を一本の線のように整えたりするために使われます。
現実世界に例えると、リベースは古い版の原稿に書き込んだ自分の修正メモを、最新の版の原稿に一枚ずつ貼り直すことのようなものです。修正の中身は同じでも、最新の版を土台にした形になるので、あとで本の原稿にまとめるときに迷いません。
リベース(Rebase)図解
土台を付け替えるという意味
名前の由来です。「ベース」は作業用のブランチが枝分かれした元の地点を指し、リベースはその土台を、本流の新しい地点へ付け替えることを意味します。Gitは、自分のブランチの変更をいったん取り外し、新しい土台の上で1つずつやり直すことで、付け替えを実現しています。
マージとの違い
よく比べられる操作です。マージは2つの流れを合流させた記録を新たに残すのに対し、リベースは記録そのものを並べ直して、合流がなかったかのような一本の履歴にします。どちらも変更を取り込むという目的は同じで、履歴の残し方が異なります。
| 項目 | マージ | リベース |
|---|---|---|
| 履歴の形 | 枝分かれと合流が残る | 一本の線に整う |
| 既存の記録 | そのまま残る | 作り直される |
| 共有済みのブランチ | 安全に使える | 原則として使わない |
| 向いている場面 | 作業の経緯を残したいとき | 履歴を見やすくしたいとき |
履歴が見やすくなる
使われる理由です。マージを繰り返すと、合流の記録が増えて履歴が入り組み、どの変更がいつ入ったのかを追いにくくなります。リベースで整えておけば、変更が順番に一列で並ぶため、あとから履歴を読む人にとって分かりやすくなります。不具合の原因となった変更を探すときにも役立ちます。
記録をまとめ直せる
応用的な使い方です。対話的にリベースを行うと、細かすぎる記録を1つにまとめる、記録の説明文を書き直す、順番を入れ替えるといった整理ができます。作業中に重ねた「修正」「再修正」のような記録を、プルリクエストを出す前に意味のある単位へ整えておくと、確認する人も読みやすくなります。
共有したブランチでは使わない
いちばん大切な決まりです。リベースは記録を作り直すため、すでにプッシュしてほかの人も使っているブランチで行うと、相手の手元の履歴と食い違い、大きな混乱を招きます。リベースは、まだ自分しか使っていないブランチに限って使うというのが、広く守られている原則です。
途中でコンフリクトが起きたら
作業中の対処です。リベースは変更を1つずつやり直すため、その途中で本流の変更とぶつかると、そのたびに止まってコンフリクトの解決を求められます。直したら続きを進める指示を出し、うまくいかないときは、リベースを中止して始める前の状態に戻せます。焦らず1つずつ解決するのがこつです。
リベースのあとのプッシュ
注意したい点です。一度プッシュした自分のブランチをリベースすると、リモートの記録と手元の記録が食い違うため、通常のプッシュは拒否されます。この場合は上書きのプッシュが必要になります。自分だけのブランチでも、上書きの前には、ほかの人が使っていないかを確かめましょう。
プルと組み合わせる
身近な使い方です。リモートの変更を取り込むプルの操作で、マージの代わりにリベースを使うよう指定できます。こうすると、自分のまだ送っていない変更が、リモートの最新の変更の後ろに並び直されます。余計な合流の記録が増えないため、チームでこの方法を標準にしている例も多くあります。
あわせて知っておきたい用語
- マージ(MERGE):
別々のブランチの変更を、ひとつにまとめる操作です。 - ブランチ(BRANCH):
開発の流れを枝分かれさせ、作業を並行して進める仕組みです。 - コミット(COMMIT):
ファイルへの変更内容を、記録として保存する操作です。 - プル(PULL):
リモートリポジトリの変更を、手元に取り込む操作です。



コメント