kledgeb UbuntuやLinuxの最新情報を紹介

Ubuntu Git その225 - マージストラテジーとは・Resolveマージストラテジーとは(git merge)

マージストラテジー(Merge strategy)

  「マージストラテジー」とは、マージのアルゴリズムのことです。

  「マージストラテジー」における重要なポイントは、「3ウェイマージ」実行時にどの共通の「親コミットオブジェクト」を選択するのか、という点です。

  マージベース(merge base)

    「マージベース」とは、「3ウェイマージ」における共通の「親コミットオブジェクト」のことです。
    「3ウェイマージ」では、マージするブランチに共通する「親コミットオブジェクト」を「マージベース」にします。

    この「マージベース」の選択は、マージ結果に影響します。
    例えば、あるブランチをマージする際、2つ以上の共通する「親コミットオブジェクト」が存在するとします。

    どの「親コミットオブジェクト」を「マージベース」に選択するかで、マージ結果が変わります。
    「マージコンフリクト」が発生する量や、そもそもユーザーが期待するファイルの中身になるかどうかが、「マージベース」の選択により変わってきます。

    この「マージベース」の選択は、「マージストラテジー」によりアルゴリズムが変わります。

  マージストラテジーの選択

    マージするブランチの状態や、ブランチの構成、及びマージ対象となるブランチの数に応じて、「Git」は適切な「マージストラテジー」を選択します。

    「Git」は可能な限り簡潔で、コストがかからない方法を選択しようとします。

    通常のマージでは、「Git」に「マージストラテジー」の選択を任せるのが良いでしょう。

    しかしそれでは都合が悪い場合、ユーザーはマージに使用する「マージストラテジー」を選択することができます。

  マージストラテジーの種類

     「マージストラテジー」には、以下の種類があります。

  • Resolve
  • Recursive
  • Octopus
  • Ours
  • Subtree

    上記の「マージストラテジー」のうち、「Ours」と「Subtree」は、特別な状況で使用します。

Resolve

  2つのブランチをマージする時に使用できる「マージストラテジー」です。


  以前の「Git」では、「Resolve」によるマージがデフォルトでした。
  (「Recursiveマージストラテジー」は後から出てきた「マージストラテジー」)

  簡潔なアルゴリズムでマージを行う

    「Resolve」は、2つのブランチの共通の「親コミットオブジェクト」を「マージベース」にし、それぞれのブランチの「コミットオブジェクト」のファイル群を「3ウェイマージ」により、マージします。

    もし複数の共通の「コミットオブジェクト」が存在する場合、いずれか1つの「親コミットオブジェクト」が「マージベース」に選択されます。

    例えば、以下のようなブランチがあるとします。


    「Commit4」と「Commit5」は、「マージコミット」で生成された「コミットオブジェクト」です。

    この時、「master」ブランチと「fix」ブランチをマージすると、3ウェイマージによってマージが行われます。

    「マージベース」となる「親コミットオブジェクト」は、ブランチの共通の「親コミットオブジェクト」ですから、「Commit3」もしくは「Commit2」が「マージベース」になります。

  十字マージ(criss-cross merge)

    上記のようなお互いのブランチがお互いの変更内容をマージしている状況を、十字マージ(criss-cross merge)といいます。


    「master」ブランチは、「Commit5」で「fix」ブランチの変更内容をマージしています。
    一方、「fix」ブランチは、「Commit4」で「master」ブランチの変更内容をマージしています。

    このようなマージでは、複数の「親コミットオブジェクト」が「マージベース」の候補に上がります。

    「マージベース」の選択は、「マージストラテジー」によって変わります。

  Resolveに指定できるオプション

    「マージストラテジー」に「Resolve」を指定した場合、「マージストラテジー」のオプションは利用できません。

  Resolveによるマージの例

    「Resolveマージストラテジー」を利用したマージの例は、「Resolveマージストラテジーでマージを行う」を参考にしてください。


Git
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 26.04 その74 - Chromium 系ブラウザーにより、Qt6 で構築されたアプリがクラッシュする現象
    Qt6 で構築されたアプリがクラッシュする現象 Chromium 系ブラウザーにより、Qt6 で構築されたアプリがクラッシュする現象が報告されています。
  • Ubuntu 24.04 その104 - Ubuntu 26.04 LTS へアップグレードするには・アップグレードの注意事項
    Ubuntu 26.04 LTS へアップグレードするには 現在 Ubuntu 24.04 LTS を利用しているユーザーは、Ubuntu 26.04 LTS へアップグレードできます。
  • Ubuntu 26.10 その35 - RISC-V 向け Ubuntu Desktop 登場
    RISC-V 向け Ubuntu Desktop 登場 Ubuntu Desktop 26.10 では、RISC-V 向けデスクトップイメージがリリースされます。
  • Ubuntu 26.10 その38 - Ubuntu 26.10 がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.10 リリース 2026年10月15日、Ubuntu 26.10 がリリースされました。
  • Ubuntu 26.10 その33 - Ubuntu 26.10 β版がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.10 β版がリリースされました 2026年10月1日、Ubuntu 26.10 β版 がリリースされました。
  • Ubuntu 26.10 その34 - Ubuntu と Rust に対する取り組み(2026年10月)
    Ubuntu と Rust に対する取り組み 2026年10月1日、Ubuntu と Rust に対する取り組みが以下で紹介されました。
  • Ubuntu 24.04 その103 - Ubuntu 26.04 LTS へアップグレード可能に・2年分の変化が一気にやってくる
    Ubuntu 26.04 LTS へアップグレード可能に 2026年9月29日、Ubuntu 24.04 LTS から Ubuntu 26.04 LTS へアップグレード可能になりました。
  • Ubuntu 26.04 その76 - CVE-2026-92392 含む curl の脆弱性22件修正・アップデートを
    curl の脆弱性22件修正 CVE-2026-92392 含む22件の curl の脆弱性に対応したセキュリティーアップデートがリリースされました。
  • Linux その440 - uutils coreutils 0.11.0 でコマンド実行時のエラーメッセージを大幅に改良
    コマンド実行時のエラーメッセージを大幅に改良 uutils coreutils 0.11.0 で、コマンド実行時のエラーメッセージが大幅に改良されました。
  • Ubuntu 26.10 その32 - Snapdragon X2 に対応した Ubuntu 26.10 実験版登場
    Snapdragon X2 に対応した Ubuntu 26.10 実験版登場 2026年9月29日、Snapdragon X2 に対応した Ubuntu 26.10 実験版が登場しました。
記事のピックアップ
オプション