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 その42 - Ubuntu 26.04.1 LTS のリリーススケジュール
    Ubuntu 26.04.1 LTSのリリーススケジュール Ubuntu 26.04.1 LTS のリリーススケジュールを紹介します。
  • Ubuntu 26.04 その68 - Ubuntu 26.04.1 LTS がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.04.1 LTS リリース 2026年8月27日、Ubuntu 26.04.1 LTS がリリースされました。
  • Linux Mint その292 - Linux kernel 7.0 採用の Linux Mint 22.3 リリース・システム管理ツールにカーネル管理機能追加など
    Linux Mint 月刊ニュース Linux Mint 開発チームは Linux Mint 月刊ニュースにて、Linux Mint の開発状況や取り組みを紹介しています。
  • Linux その422 - GNOME Boxes の再構築と未来・Flatpak のみの提供やモダンな機能の実装など
    GNOME Boxes の再構築と未来 GNOME Boxes の再構築と未来が以下で紹介されています。
  • Kubuntu その117 - Kubuntu 26.04 LTS にもっと手厚いサポートを・最高の信頼性を誇る KDE 搭載ディストリビューションを目指して
    最高の信頼性を誇る KDE 搭載ディストリビューションを目指して Kubuntu 26.04 LTS に手厚いサポートが導入されました。
  • Linux その421 - GNOME Shell のデザイン構想と長期的な見通し
    GNOME Shell のデザイン構想と長期的な見通し GNOME Shell のデザイン構想と長期的な見通しが、以下で紹介されています。
  • Linux その420 - KDE Plasma で実装予定の新機能や改善・UI レイアウトの調整やリモートデスクトップの改善など
    KDE Plasma で実装予定の新機能や改善 KDE Plasma で実装予定の新機能や改善を紹介します。
  • Ubuntu 24.04 その96 - Ubuntu 24.04.5 LTS のリリース日変更
    Ubuntu 24.04.5 LTS のリリース日変更 Ubuntu 24.04.5 LTS のリリース日が変更されました。
  • Ubuntu 18.04 その195 - PolicyKitにクラッシュや権限の昇格など複数の脆弱性・今すぐアップデートを
    PolicyKitの脆弱性 2018年7月16日、クラッシュや権限の昇格など複数の脆弱性に対応した「PolicyKit」がリリースされました。
  • Windows その29 - Windows 向け Coreutils 登場・Coreutils のインストールやコマンドの一覧など
    Windows 向け Coreutils 登場 Windows 向け Coreutils が登場しました。
記事のピックアップ
オプション