Skip to content
Latchkey

Git rebaseとは?

rebaseは一連のcommitを新しいベースへ移し、1つずつ再生して、よりクリーンで線形の履歴を生み出します。

rebaseは、変更を統合するためのmergeの代替手段です。merge commitで2つの履歴を結び付ける代わりに、rebaseはあなたのcommitを、最新のターゲットbranchの上で行われたかのように書き換えます。結果は一直線の履歴で、多くのチームがより読みやすいと感じます。

rebaseが行うこと

Gitはあなたのbranch固有のcommitを取り出して脇に置き、あなたのbranchをターゲットのtipへ移動し、あなたのcommitを1つずつ再適用します。commitハッシュを書き換えるため、履歴はあなたの作業が常に最新のmainの後に来たかのように見えます。

mainへのrebase

一般的なワークフローでは、pull requestを開くか完成させる前に、feature branchを最新のmainで更新します。

Rebasing a feature branch
git switch feature/api
git fetch origin
git rebase origin/main

rebaseとmergeの比較

mergeはbranchが分岐した時点を含め、履歴の真の形を保ちます。一方rebaseは、commitを書き換える代償として、クリーンで線形のストーリーを生み出します。どちらも正当です。選択は主にチームの好みと、正確な記録をどれだけ重視するか、整った履歴をどれだけ重視するかによります。

rebaseとCI/CD

merge前にbranchをrebaseすると、CIは最新のmainに対してコードをtestするため、branchが単独では通ったのに結合後に壊れるという驚きを減らせます。rebaseはcommitハッシュを書き換えるため、新しいpushと新鮮なpipelineの実行を強制し、checkが更新されたベースを反映するようにします。

黄金律

  • 自分のpushしていない作業は、履歴を整えるために自由にrebaseする。
  • 他の人が既にpullした共有branchのrebaseは避ける。
  • 書き換えたbranchのforce-pushは、自分が所有する場合にのみ行う。
  • commitとベースが変わったので、rebase後はCIを再実行する。

重要なポイント

  • rebaseはあなたのcommitを新しいベースへ再生し、線形の履歴を作ります。
  • commitハッシュを書き換えるため、共有branchのrebaseは避けましょう。
  • merge前のrebaseは、最新のmainに対してコードをtestします。

関連ガイド