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/mainrebaseと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します。
関連ガイド
What Is a Git Merge?What is a Git merge? An explainer on how merging combines branches, fast-forward versus merge commits, confli…
What Is a Commit SHA?What is a commit SHA? Learn how Git derives a unique hash for each commit, how short SHAs work, and why pinni…
What Is a Git Branch?What is a Git branch? Learn how branches are lightweight movable pointers, how they enable parallel work, and…