Menu
Coddy logo textTech

Git Rebase vs Merge

最終更新

git mergegit rebase はどちらも、あるブランチの作業を別のブランチへ取り込みます。git merge は 2 つの履歴をマージコミットで結び付け、実際に起きたことをそのまま保持します。git rebase はあなたのコミットを 1 つずつ別のブランチの上に再適用し、きれいで直線的な履歴を作りますが、その過程でコミットを書き換えます。

黄金律: 他の人がすでに pull したコミットには決して rebase しないこと。両方をターミナルプレイグラウンドで試してみましょう — ブラウザ内の本物のシェルです。

並べて比較

Behaviorgit mergegit rebase
履歴の形マージコミットを伴う分岐直線的
コミットを書き換えるいいえはい
共有ブランチで安全はいいいえ
正確な履歴を保持するはいいいえ
何がいつマージされたか追跡しやすいはい難しい

構文

CommandWhat it does
git merge featurefeature を現在のブランチにマージする
git merge --no-ff feature常にマージコミットを作成する
git rebase main現在のブランチのコミットを main の上に再適用する
git rebase -i HEAD~3直近 3 件のコミットを対話的に編集する
git rebase --abort進行中の rebase を中止する

Git rebase vs merge よくある質問

git rebase と git merge の違いは何ですか?
git merge は、2 つのブランチの履歴を結び付ける新しいマージコミットを作成して両者を統合し、何が起きたかの正確な記録を保ちます。一方 git rebase は、あなたのコミットを別のブランチの上に再適用されるように移動させ、一直線の履歴を作りますが、それらのコミットを新しいハッシュで書き換えます。merge は履歴を保持し、rebase はきれいにするために履歴を書き換えます。
merge を使うべきときと rebase を使うべきときは?
完成したブランチ(特に共有されているもの)を統合するには merge を使いましょう — 安全で非破壊的です。共有する前に自分のローカルコミットを整理したり、フィーチャーブランチを最新の main の上に更新してきれいな履歴にしたりするには rebase を使いましょう。多くのチームはローカルで rebase し、その後 main に merge します。
rebase の黄金律とは何ですか?
他の人がすでに作業の土台にしているコミット — 通常は共有ブランチに push したものすべて — には決して rebase しないでください。rebase はコミットを書き換えるため、そうすると他の全員が分岐した履歴の調整を強いられます。ローカルで未 push のコミットには自由に rebase し、すでに公開されているものには merge(または revert)を使いましょう。
rebase と merge のどちらが競合が少ないですか?
どちらも競合を回避はしませんが、現れ方が異なります。merge はすべての競合をマージコミットで一度に解決します。rebase は各コミットが再適用されるにつれて、コミットごとに競合の解決を求めることがあります。作業量の合計は同程度で、rebase はそれを分散させるだけです。
これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ内の本物のシェルで git mergegit rebase を実行できます — インストール不要です。Coddy の無料のインタラクティブな Git コースでも、マージと rebase を段階的に扱っています。
Coddy programming languages illustration

Coddy で Git を学ぼう

始める