マージとは

この記事の結論

  • マージとは、分かれて進めた2つの履歴を1つに合流させる操作です。Gitは枝が分かれた地点を探し、両側の変更を突き合わせて1つにまとめます。
  • 同じファイルの同じ場所を両方が書き換えていたときだけ、Gitは自動で決められません。これがコンフリクトで、印の入ったファイルを開き、残す内容に書き直してから記録し直すのが直し方です。
  • 枝分かれの形をそのまま残して合流させるのがマージ、枝のコミットを本流の先へ付け替えて一直線にするのがリベース、枝の記録を1つにまとめて取り込むのがスカッシュマージです。

まーじ/Merge

分かれて進めた2つの履歴を、1つに合流させる操作のことです。

最終更新: 2026-09-17

01

マージとは何か(意味と読み方)

マージとは、ブランチに分かれて進めた2つの履歴を、1つに合流させる操作のことです。読み方は「まーじ」、英語では merge と書き、「併合する」「溶け合わせる」という意味の言葉です。

使う場面はほぼ決まっています。作業用の枝で機能を仕上げ、動くところまで確認できたので、本流の main に取り込む。このときに行うのがマージです。コミットが「変更を記録する」操作、マージは「分かれていた記録を1つに戻す」操作、と覚えると混ざりません。

チームで開発している場合、マージはプルリクエストの画面から行うことが多く、そこでは「マージ」ボタンを押す操作になります。手元で git merge を打つ場合も、起きていることは同じです。コマンドの正式な説明はgit-merge(git-scm.com)にまとまっています。

02

マージすると履歴はどうなるのか

Gitはまず、2つの枝が分かれた地点(共通の祖先)を探します。そのうえで、分かれてから両側で起きた変更を突き合わせ、1つの状態にまとめます。片方だけが触った場所はそのまま採用され、両方が触った場所だけが判断の対象になります。

合流のしかたは2通りあります。

  • 早送り(fast-forward):枝が分かれたあと、取り込み先がまったく動いていない場合。合流用の記録は作られず、名札を枝の先端まで進めるだけで終わります。
  • マージコミットを作る:両方が動いていた場合。合流専用のコミットが1つ作られます。このコミットだけは、1つ前が2つある(親が2つ)という形になります。

どちらの場合も、枝の上で作ったコミットは消えません。あとから履歴をたどれば、「どの枝で、いつ、何を変えたのか」は残ったままです。合流したあとで枝の名札を消しても、記録そのものは本流に残ります。

03

マージの基本的な手順

手元で合流させるときの流れは次の4段階です。取り込む先へ移動してから実行する、という向きを間違えないのが一番のポイントです。

手元でマージするときの手順
順番やることコマンドの例
1取り込む先の枝へ移動するgit switch main
2共有先の最新を手元に取り込むgit pull
3作業用の枝を合流させるgit merge feature/signup-email-check
4動作を確かめてから共有先へ送るgit push

2番目を飛ばすと、古い状態の上に合流させることになり、あとからプッシュを断られます。先に最新を取り込んでおくと、この手戻りが減ります。なお、合流の途中で「やっぱりやめたい」と思ったら、git merge --abort で合流前の状態に戻せます。

04

コンフリクト(衝突)が起きたときの直し方

コンフリクトは、同じファイルの同じ場所を、両方の枝が別々に書き換えていたときに起きます。どちらを残すべきかはGitには判断できないので、処理を止めて人に渡してきます。エラーではなく、判断を求められている状態です。

該当のファイルを開くと、次のような印が入っています。

  • <<<<<<< から ======= まで:いま自分がいる側の内容
  • ======= から >>>>>>> まで:取り込もうとしている側の内容

直す手順は、(1) 印の入ったファイルを開く、(2) 最終的に残したい形に書き直す、(3) 印の3行を消す、(4) git add で解決済みにする、(5) git commit で確定する、の5段階です。

注意したいのは、どちらか片方を丸ごと選べば済むとは限らないことです。両側の変更がどちらも必要な場合もあり、そのときは2つを組み合わせた形に書き直します。片方を機械的に消すと、消した側の変更は履歴の上では合流したことになっているのに、中身は失われます。判断に迷ったら、その行を書いた人に確認するのが確実です。GitHub上での見え方と直し方はマージコンフリクトについて(GitHub Docs)に説明があります。

05

マージ・リベース・スカッシュマージの違い

「枝の変更を本流に取り込む」ためのやり方は1つではありません。履歴の残り方が違うので、場面で使い分けます。

マージ・リベース・スカッシュマージの違い
やり方履歴の形向いている場面
マージ枝分かれと合流の形がそのまま残る経緯を残したいとき。共有済みの枝を扱うとき
リベース枝のコミットを本流の先端に付け替え、一直線になる手元だけの枝を整えてから出すとき
スカッシュマージ枝のコミットを1つにまとめて取り込む細かい試行錯誤を本流に残したくないとき

リベースとスカッシュマージは、コミットを作り直しているという点が共通です。見た目はすっきりしますが、すでに共有した枝に対して行うと、他の人の手元と食い違います。共有済みの履歴には使わない、と決めておくのが安全です。取り込み方の選択肢はプルリクエストのマージについて(GitHub Docs)にも整理されています。

06

マージを使うときの注意点

  • 合流の前に取り込み先を最新にする:古い状態の上で合流させると、送る段階でやり直しになります。
  • 小さく、頻繁に合流させる:枝を長く抱えるほど、衝突する場所が増えます。
  • 衝突を勘で消さない:消した側の変更は、履歴の上では取り込んだことになってしまいます。
  • 合流したら動作を確かめる:両側とも単体では正しくても、合わせた状態で壊れることがあります。テストを通してから送ります。

合流まわりの動きを図で追いたい場合は、Pro Git 日本語版(git-scm.com)の「ブランチとマージの基本」の節が入口として読みやすい資料です。

07

関連用語

08

関連記事

09

よくある質問

Q1. マージとは何ですか?
分かれて進めた2つの履歴を1つに合流させる操作のことです。Gitは枝が分かれた地点を探し、そこから両側で起きた変更を突き合わせて1つの状態にまとめます。作業用の枝で作った機能を本流へ取り込むときに使います。

Q2. マージとプルリクエストは何が違いますか?
プルリクエストは「この枝を取り込んでください」と依頼し、レビューを受けるための仕組みです。マージは実際に合流させる操作そのものを指します。プルリクエストの画面でマージボタンを押すと、その場でマージが行われます。

Q3. コンフリクトはなぜ起きるのですか?
同じファイルの同じ場所を、両方の枝が別々に書き換えていたからです。どちらを残すべきかはGitには判断できないため、処理を止めて人に判断を求めます。壊れたわけではなく、選択を待っている状態です。

Q4. コンフリクトはどう直しますか?
印の入ったファイルを開き、最終的に残したい形に書き直してから、目印の行を消します。そのあと git add で解決済みにし、git commit で確定します。途中でやめたい場合は git merge --abort で合流前に戻せます。

Q5. マージとリベースはどう使い分けますか?
経緯を残したいときや、すでに共有している枝を扱うときはマージです。リベースはコミットを作り直して履歴を一直線にするので、他の人の手元と食い違う恐れがあります。手元だけの枝を整えるときに限って使うのが安全です。