ファイルの変更内容を結合する
「git merge」コマンドは、異なるコミットオブジェクトに含まれるファイル群を結合するコマンドです。いわゆるマージです。
マージの基本
マージの概念や基本については、以前紹介しているので、以下を参考にしてください。- ブランチとブランチの変更内容を結合するマージについて・ファーストフォワードについて
- 3ウェイマージについて・マージの中断とマージコンフリクトについて
- よく利用されるブランチの使い方・長期間継続的に利用するブランチ
- 短期間で他のブランチにマージされるブランチ
何をマージするのか?
マージの対象は、「コミットオブジェクト」(スナップショット)に含まれるファイル群です。よく、「ブランチとブランチをマージする」という表現が使用されますが、実際は、ブランチの「ブランチヘッド」が指す「コミットオブジェクト」がマージの対象になります。
ブランチ自身がマージされるわけではないです。
あくまでマージされるのは、「コミットオブジェクト」に含まれるファイル群です。
従ってマージを行う際に指定する「コミットオブジェクト」は、ブランチでなくとも、他の「コミットオブジェクト」を指す参照で指定しても良いです。
例えば「タグ」による指定も可能です。
もちろん、直接「コミットオブジェクト」の識別子を指定しても良いです。
マージとHEADの関係
マージは、「HEAD」が指す「コミットオブジェクト」に対して行われます。「HEAD」が指す「コミットオブジェクト」に、他の「コミットオブジェクト」のファイル群がマージされることになります。
マージを実行する前に「HEAD」が指す「コミットオブジェクト」が、自分が操作対象にしたい「コミットオブジェクト」であるかどうかを、確認しておきましょう。
「HEAD」がブランチを指しているなら、現在のブランチが操作対象になり、ブランチヘッドが指す「コミットオブジェクト」に他の「コミットオブジェクト」のファイル群がマージされます。
注釈付きタグとマージコミット
マージするコミットオブジェクトを「注釈付きのタグ」で指定した場合、「ファーストフォワード」でマージできる状況でも、「ファーストフォワード」でマージを行わず「マージコミット」を行います。git mergeの機能
「git merge」コマンドの機能を大別すると、以下のようになります。- ファイルのマージを行う
- マージを中止する
ファイルのマージを行うコマンドの説明
ファイルのマージを行うコマンドの説明です。コマンドのフォーマットは、以下のようになります。
git merge <オプション> <マージするコミットオブジェクト>
マージの基本的な例は、以下を参考にしてください。
マージコミットに関するオプション
「マージコミット」に関するオプションです。「3ウェイマージ」及び「マージするコミットオブジェクト」に「注釈付きタグ」を指定した時に関係するオプションです。
いずれのオプションも省略できます。
マージコミットを行う(--commit)
マージ完了後、「マージコンフリクト」が発生しなければ、自動的に「マージコミット」を行います。これはデフォルトの動作です。
このオプションの使用例は、「マージコミットの実行を明示して、3ウェイマージを行う」を参考にしてください。
マージコミットを行わない(--no-commit)
マージ完了後、自動的に「マージコミット」を行いません。ユーザーは自分でコミットを行う必要がありますが、コミットを行う前にマージ後のファイルの内容を確認することができます。
このオプションの使用例は、「マージコミットを行わず、3ウェイマージを行う」を参考にしてください。
ファイルのマージは行うが、マージ処理は行わない(--squash)
ファイルのマージは行いますが、ファイルマージ後のマージ処理は行いません。これは、ユーザーが手動でファイルのマージを行った状態と同じ状態になります。
ファイルマージ後のマージ処理を行わないため、自動的に「マージコミット」は行われません。
このオプションの使用例は、「ファイルのマージのみを行い、Gitによるマージ処理を行わない」を参考にしてください。
ファイルのマージを行い、マージ処理を行う(--no-squash)
ファイルのマージは行い、ファイルマージ後のマージ処理を行います。マージ完了後、「マージコンフリクト」が発生しなければ、自動的に「マージコミット」を行います。
これはデフォルトの動作です。
このオプションの使用例は、「ファイルのマージを行い、Gitによるマージ処理を行う」を参考にしてください。
ファーストフォワードに関するオプション
「ファーストフォワード」に関するオプションです。いずれのオプションも省略できます。
ファーストフォワードによるマージを行う(--ff)
「ファーストフォワード」によるマージが可能ならば、「ファーストフォワード」によるマージを行います。ただし、「マージするコミットオブジェクト」に「注釈付きのタグ」を指定した場合は、「ファーストフォワード」によるマージが可能な状況でも、「ファーストフォワード」によるマージを行いません。
これはデフォルトの動作です。
このオプションの使用例は、「ファーストフォワードによるマージが可能なら、ファーストフォワードによるマージを行う」を参考にしてください。
ファーストフォワードによるマージを行わない(--no-ff)
「ファーストフォワード」によるマージが可能な状況でも、「ファーストフォワード」によるマージを行いません。マージ後、「マージコミット」を行います。
このオプションの使用例は、「ファーストフォワードによるマージを行わず、マージコミットを行う」を参考にしてください。
ファーストフォワードによるマージが行える時のみ、マージを行う(--ff-only)
「ファーストフォワード」によるマージが行える時のみ、マージを行います。もし「ファーストフォワード」によるマージが行えない時は、マージを行いません。
「マージするコミットオブジェクト」に「注釈付きのタグ」を指定した場合は、「ファーストフォワード」によるマージを行います。
このオプションの使用例は、以下を参考にしてください。
コミットメッセージに関するオプション
「マージコミット」を行う時に入力する「コミットメッセージ」に関するオプションです。いずれのオプションも省略できます。
コミットメッセージを入力するテキストエディターを起動する(--edit, -e)
「マージコミット」を行う際、「コミットメッセージ」を入力するテキストエディターを起動します。このオプションを指定すると、オプションで「コミットメッセージ」を指定しても、テキストエディターが起動するようになります。
この時、デフォルトの「コミットメッセージ」は、ユーザーがオプションで指定したメッセージになります。
このオプションの使用例は、「マージコミットを行う時に、コミットメッセージを入力するテキストエディターを起動する」を参考にしてください。
コミットメッセージを入力するテキストエディターを起動しない(--no-edit)
「マージコミット」を行う際、「コミットメッセージ」を入力するテキストエディターを起動しません。ユーザーがオプションで「コミットメッセージ」を指定しなかった場合、「Git」が生成するデフォルトの「コミットメッセージ」が適用されます。
このオプションの使用例は、「マージコミットを行う時に、コミットメッセージを入力するテキストエディターを起動しない」を参考にしてください。
コミットメッセージを指定する(-m)
「マージコミット」を行う際、このオプションで指定した「コミットメッセージ」が適用されます。このオプションを省略した場合、既定ではテキストエディターが起動し、「コミットメッセージ」の入力が促されます。
このオプションの使用例は、「コミットメッセージを指定して、マージコミットを行う」を参考にしてください。
マージするコミットオブジェクトのコミットメッセージを追加する(--log)
「マージコミット」を行う際、「マージするコミットオブジェクト」に指定した「コミットオブジェクト」の「コミットメッセージ」を、指定した履歴分、「マージコミット」の「コミットメッセージ」に追加します。このオプションの使用例は、「マージするコミットオブジェクトのコミットメッセージを、マージコミットのコミットメッセージに追加する」を参考にしてください。
マージするコミットオブジェクトのコミットメッセージを追加しない(--no-log)
「マージコミット」を行う際、「マージするコミットオブジェクト」に指定した「コミットオブジェクト」の「コミットメッセージ」を、「マージコミット」の「コミットメッセージ」に追加しません。デフォルトでは、「マージコミット」の「コミットメッセージ」に追加しません。
このオプションの使用例は、「マージするコミットオブジェクトのコミットメッセージを、マージコミットのコミットメッセージに追加しない」を参考にしてください。
マージ結果に関するオプション
マージ結果に関するオプションです。いずれのオプションも省略できます。
ファイルの変更点など差分を表示する(--stat)
マージ結果に、ファイルの変更点など差分(diffstat)を表示します。デフォルトでは、ファイルの変更点など差分が表示されます。
このオプションの使用例は、「マージ結果に、ファイルの変更点など差分(diffstat)を表示する」を参考にしてください。
ファイルの変更点など差分を表示しない(-n, --no-stat)
マージ結果に、ファイルの変更点など差分(diffstat)を表示しません。このオプションの使用例は、「マージ結果に、ファイルの変更点など差分(diffstat)を表示しない」を参考にしてください。
PGP署名に関するオプション
PGP署名に関するオプションです。いずれのオプションも省略できます。
PGP署名の検証を行う(--verify-signatures)
「マージするコミットオブジェクト」に指定した「コミットオブジェクト」のPGP署名を検証します。「コミットオブジェクト」に署名がない場合や、署名の妥当性がチェックできない場合は、マージを行いません。
このオプションの使用例は、「コミットオブジェクトのPGP署名の検証を行い、マージを行う」を参考にしてください。
PGP署名の検証を行わない(--no-verify-signatures)
「マージするコミットオブジェクト」に指定した「コミットオブジェクト」のPGP署名を検証しません。デフォルトでは、PGP署名の検証は行いません。
このオプションの使用例は、「コミットオブジェクトのPGP署名の検証を行わず、マージを行う」を参考にしてください。
マージコミットでPGP署名を行う(-S, --gpg-sign)
「マージコミット」でPGP署名を行います。デフォルトでは、「マージコミット」でPGP署名を行いません。
これは、「コミットオブジェクト」に対する署名になります。
このオプションの使用例は、「マージコミットでPGP署名を行う」を参考にしてください。
Rerereに関するオプション
Rerere(Reuse recorded resolution)に関するオプションです。「git merge」コマンドは、マージ時に自動的にRerereによる「マージコンフリクト」の解消を行います。
Rerereによるマージコンフリクトの解消を行い、ファイルをステージングエリアに追加する(--rerere-autoupdate)
Rerereによるマージコンフリクトの解消を行い、「マージコンフリクト」が発生したファイルをステージングエリアに追加します。このオプションの使用例は、「マージ実行時、Rerereによるマージコンフリクトの解消を行い、マージコンフリクトが発生したファイルをステージングエリアに追加する」を参考にしてください。
Rerereによるマージコンフリクトの解消を行うが、ファイルをステージングエリアに追加しない(--no-rerere-autoupdate)
Rerereによるマージコンフリクトの解消を行いますが、「マージコンフリクト」が発生したファイルをステージングエリアに追加しません。このオプションの使用例は、「マージ実行時、Rerereによるマージコンフリクトの解消を行うが、マージコンフリクトが発生したファイルをステージングエリアに追加しない」を参考にしてください。
マージストラテジーに関するオプション
「マージストラテジー(merge strategy)」に関するオプションです。「マージストラテジー」とは、簡潔に言うと、マージ方法のことです。
すでに上記で紹介している通り、マージ方法はオプションの指定である程度制御可能です。
さらに細かな制御を行うには、「マージストラテジー」に関するオプションを利用します。
いずれのオプションも省略できます。
マージストラテジーを指定する(-s, --strategy)
「マージストラテジー」を指定します。このオプションの使用例は、「マージストラテジー」を参考にしてください。
マージストラテジーのオプションを指定する(-X, --strategy-option)
「マージストラテジー」のオプションを指定します。指定できるオプションは、「マージストラテジー」により異なります。
このオプションの使用例は、「マージストラテジー」を参考にしてください。
マージストラテジーに関するオプションを省略した場合
「マージストラテジー」に関するオプションを省略した場合、「Git」が自動的に最適な「マージストラテジー」を選択します。マージの中止に関するオプション
マージの中止に関するオプションです。マージを中止する(--abort)
「マージコンフリクト」発生時、マージを中止してマージ前の状態に戻します。このオプションの使用例は、「マージを中止し、マージ前の状態に戻す」を参考にしてください。
情報の出力に関するオプション
コマンド実行時に出力される情報に関するオプションです。いずれのオプションも省略できます。
情報を出力しない(-q, --quiet)
情報を出力しません。「--no-progress」オプションも暗黙のうちに指定されます。
詳細情報を出力する(-v, --verbose)
通常の情報に加え、詳細情報を出力します。マージの進捗を表示する(--progress)
マージの進捗状況を表示します。ただし全てのマージ方法で進捗情報が表示されるとは限りません。
マージの進捗情報の表示に関するオプションを指定しなかった場合、端末が標準エラーに接続されている時のみ、マージの進捗状況を表示します。
マージの進捗を表示しない(--no-progress)
マージの進捗状況を表示しません。マージの進捗情報の表示に関するオプションを指定しなかった場合、端末が標準エラーに接続されている時のみ、マージの進捗状況を表示します。
マージするコミットオブジェクト
マージする「コミットオブジェクト」を指定します。複数の「コミットオブジェクト」を指定できます。
「コミットオブジェクト」を指す参照で指定することもでき、 以下の指定方法が利用できます。
- ブランチ名
- タグ名
- コミットオブジェクトの識別子
- FETCH_HEAD
- マージするコミットオブジェクトの省略
「ブランチ名」を指定するケースが多いでしょう。
1.ブランチ名
ブランチヘッドが指す「コミットオブジェクト」を指定します。2.タグ名
タグが指す「コミットオブジェクト」を指定します。デフォルトでは、「注釈付きのタグ」が指定されると、「ファーストフォワード」によるマージは行われません。
また、「注釈付きのタグ」に署名がなされている場合、署名の検証も行われます。
タグ指定による署名の検証の例は、「注釈付きのタグの署名の検証を行い、マージを行う」を参考にしてください。
3.コミットオブジェクトの識別子
直接「コミットオブジェクト」の識別子を指定します。コミットオブジェクトの識別子は、4文字以上の識別子を入力します。
4.FETCH_HEAD
フェッチしたブランチのブランチヘッドが指す「コミットオブジェクト」を指定します。5.マージするコミットオブジェクトの省略
「マージするコミットオブジェクト」を省略すると、指定されたブランチに関連付けられた「リモートトラッキングブランチ」を指定したものとして扱われます。このオプションの使用例は、「リモートトラッキングブランチとマージを行う」を参考にしてください。