kledgeb Ubuntuの使い方や日本語化、アプリの使い方を紹介しています。 Ubuntuの最新情報も紹介しています。

ファイルのマージのみを行い、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.ブランチの状態

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



関連コンテンツ
同一カテゴリーの記事
コメント
オプション