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

Ubuntu Git その216 - ファイルのマージのみを行い、Gitによるマージ処理を行わない(git merge)

ファイルのマージのみを行い、Gitによるマージ処理を行わない

  ファイルのマージのみを行い、Gitによるマージ処理を行いません。
  通常「Git」のマージは、以下のような流れになります。

  1. ファイルの差分を作成する
  2. ファイルの差分をマージする
  3. マージコンフリクトが発生したら、マージを中断してユーザーにマージコンフリクトの解消を促す
  4. マージコンフリクトが発生しなかったら、マージコミットを行う
  5. マージ後のコミットオブジェクトは、マージしたコミットオブジェクトを親コミットオブジェクトに持つ

  Gitによるマージ処理とマージの管理

    「マージコンフリクト」の発生によりマージを中断した場合、「Git」は「マージコンフリクト」の発生により、マージが中断されている状態を認識します。
    この状態は、「マージコンフリクト」を解消しコミットするか、ユーザーがマージを中止しない限り、解消されません。

    また、マージ後の「コミットオブジェクト」は、マージした「コミットオブジェクト」を「親コミットオブジェクト」に持つように設定されます。
    例えば、3つのブランチをマージした場合、マージ後の「コミットオブジェクト」の「親コミットオブジェクト」は、3つ存在します。

    これら一連の処理は、「Git」がマージの状態や結果を管理し、「Git」のマージ処理の管理下で行われています。
  

 ファイルのマージのみを行い、Gitによるマージ処理を行わない 

    上記のマージ処理のうち、「1.」〜「2.」の処理のみ、利用することもできます。
    すなわち、ファイルのマージのみ行います。

    これは「Git」から見ると、マージではありません。
    従って「マージコミット」は行われませんし、「マージコンフリクト」が発生しても、マージとして認識していないため、マージの中止は行えません。

    これは、ユーザーが自分で「ワーキングディレクトリー」内のファイルに対し、別の「スナップショット」のファイルを手動でマージした状態と同じです。

    またマージではないため、「他のブランチとマージした」など、マージに関する情報も、一切保持されません。

    この方法を利用すると、マージを行うことなく、他の「コミットオブジェクト」のファイル群とファイルのマージを行うことができます。
    ファイルの差分を取り込むイメージです。

  コミットは自分で行う

     ファイルのマージ後にコミットは行われないため、ユーザーは自分でコミットする必要があります。

コマンドの実行例

  コマンドの実行例です。

  1.ブランチの確認

    現在のブランチ構成を確認すると、以下のようになっています。
    現在のブランチは、「master」ブランチであることが分かります。
    同様に、「HEAD」は「master」ブランチを指していることが分かります。

    ここでは例として、「master」ブランチに「fix」ブランチをマージします。


  2.ブランチの状態

    ブランチの状態を図にすると、以下のようになります。


    見ての通り、この状態で「master」ブランチに「fix」ブランチをマージすると、「3ウェイマージ」によるマージになることが分かります。
    ただしマージは、ファイルのマージのみ行われます。

  3.コマンドの実行

    コマンドのオプションは、以下のオプションを指定します。

オプション
--squash

    「端末」から、以下のコマンドを実行します。
    コマンドの詳細は、「ファイルのマージを行うコマンドの説明」を参考にしてください。

    ポイントは、赤字の箇所です。

git merge --squash --verbose fix


  4.コマンドの実行結果

    ファイルのマージのみ行われます。
    もし「マージコンフリクト」が発生した場合、その旨が出力されます。


  5.マージ後のワーキングディレクトリーの確認

    マージ後の「ワーキングディレクトリー」を確認すると、以下のようになっています。


    「fix」ブランチにあった「file2.txt」が新規に追加されたファイルとして認識され、「ステージングエリア」に追加されています。

    今回の例では存在しませんが、「マージコンフリクト」が発生しなかった編集されたファイルも、「ステージングエリア」に追加されます。

    「マージコンフリクト」が発生したファイルは、「コンフリクトマーカー」が挿入されます。
     ユーザーは必要な編集を行います。

  6.マージ後のブランチの確認

    マージ後のブランチを確認すると、以下のようになっています。
    「1.」の状態と同じです。


    「1.」の状態と比較すると、「ワーキングディレクトリー」内のファイル構成やファイルの内容が、マージにより更新されている状態です。

  7.コミットを行う

    コンフリクトの解消など、必要な作業を行ったらコミットします。


  8.コミット後のブランチの確認

    コミット後のブランチを確認すると、以下のようになっています。


    「master」ブランチのブランチヘッドが指す「コミットオブジェクト」の識別子は、「7.」のコミットで生成した「コミットオブジェクト」を指しています。

  9.ブランチの状態

    ブランチの状態を図にすると、以下のようになります。



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 が登場しました。
記事のピックアップ
オプション