SYNOPSIS
git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
[--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
[--[no-]allow-unrelated-histories]
[--[no-]rerere-autoupdate] [-m <msg>] [-F <file>] [<commit>…]
git merge (--continue | --abort | --quit)
DESCRIPTION
名前付きのコミット(その履歴が現在のブランチから分岐した時点以降のもの)からの変更を現在のブランチに取り込みます。
このコマンドは、別のリポジトリからの変更を組み込むために git pull
によって使用され、そして、あるブランチから別のブランチに変更をマージするために手動で使用できます。
以下の履歴が存在し、現在のブランチが master であるとします:
A---B---C topic
/
D---E---F---G master
次に、git merge topic は、 master から分岐(ここでは E)してから、topic
ブランチの現在のコミット(C)まで topic`ブランチに加えられた変更を `master 上で再生(replay)します。
その結果を、2つの親コミットの名前と、変更を説明するユーザーからのログメッセージとともに、新しいコミットに記録します。
A---B---C topic
/ \
D---E---F---G---H master
2番目の構文(git merge --abort)は、マージによって競合が発生した後にのみ実行できます。 git merge
--abort`はマージ処理を中止し、マージ前の状態を再構築しようとします。
ただし、マージの開始時にコミットされていない変更があった場合(特に、マージの開始後にそれらの変更がさらに変更された場合)、 `git merge
--abort は、元の(マージ前の)変更を再構築できない場合があります。つまり以下の事が言えます:
|
Warning
|
自明でない未コミットの変更に対して git merge を実行することは推奨されません。
可能ではありますが、
競合が発生した場合に元に戻すのが難しい状態になる可能性があります。 |
3番目の構文(git merge --continue)は、マージによって競合が発生した後にのみ実行できます。
OPTIONS
-
--commit -
--no-commit -
マージを実行し、結果をコミットします。 このオプションは、
--no-commitをオーバーライドするために使用できます。--no-commitを使用すると、マージを実行し、マージコミットを作成する直前に停止して、ユーザーに、コミットする前にマージ結果を検査し、さらに微調整する機会を提供します。注意: 早送り(fast-forward)更新はマージコミットを作成しないため、
--no-commitを使用してこれらのマージを停止する方法はないことに注意してください。 したがって、mergeコマンドによってブランチが変更または更新されないようにする場合は、--no-ffと--no-commitを使用します。 -
--edit -
-e -
--no-edit -
機械的マージがを成功する前にエディターを呼び出して、自動生成されたマージメッセージをさらに編集し、ユーザーがマージについて説明して正当化できるようにします。
--no-editオプションを使用して、自動生成されたメッセージを受け入れることができます(これは一般的には推奨されていません)。 --edit(または -e) オプションは、あなたがコマンドラインから-mオプションで与えた下書きメッセージをエディタで編集したい場合にも便利です。古いスクリプトは、ユーザーがマージログメッセージを編集できないようにするという過去の動作に依存している可能性があります。 そのような場合は
git mergeを実行すると、エディターを開く事になります。 このようなスクリプトを簡単に最新の挙動に合わせるために、環境変数GIT_MERGE_AUTOEDITをスクリプトの先頭でnoに設定できます。 -
--cleanup=<mode> -
このオプションは、コミットする前にマージメッセージをクリーンアップする方法を決定します。 詳細については、 git-commit(1)を参照してください。 加えて、
<mode>にscissors値が指定されている場合、マージの競合が発生した時に、切り取り線(scissors)はコミット機構に渡される前にMERGE_MSGに追加されます。 -
--ff -
--no-ff -
--ff-only -
マージされた履歴がすでに現在の履歴の子孫である場合に、マージがどのように処理されるかを指定します。
--ffは、refs/tags/階層の自然な場所に格納されていない注釈付き(および場合によっては署名済み)タグをマージしない限り、デフォルトです。マージする場合は、--no-ffが想定されます。--ffを使用すると、可能であれば、マージを早送り(fast-forward)(マージされたブランチに一致するようにブランチポインタを更新するだけです。マージコミットは作成しません)として解決します。 不可能な場合(マージされた履歴が現在の履歴の子孫ではない場合)は、マージコミットを作成します。--no-ffを使用すると、マージが早送り(fast-forward)として解決できる場合でも、すべての場合にマージコミットを作成します。--ff-onlyを使用して、可能な場合はマージを早送り(fast-forward)として解決します。不可能な場合は、マージを拒否し、ゼロ以外のステータスで終了します。 -
-S[<keyid>] -
--gpg-sign[=<keyid>] -
--no-gpg-sign -
マージコミット結果にGPG署名します。
keyid引数はオプションであり、デフォルトでコミッターIDになります。 指定する場合は、スペースなしでオプションに串刺しする必要があります。--no-gpg-signは、commit.gpgSign構成変数と、これ以前に指定した--gpg-signの両方を打ち消すのに役立ちます。 -
--log[=<n>] -
--no-log -
ブランチ名に加えて、マージされている実際のコミットから最大<n>個のコミットの1行説明をログメッセージに入力します。 git-fmt-merge-msg(1) も参照してください。
--no-logを使用すると、マージされる実際のコミットからの1行説明が一覧表示されません。 -
--signoff -
--no-signoff -
コミットログメッセージの最後に、コミッターによる「Signed-off-by」トレーラーを追加します。signoffの意味は、コミットしているプロジェクトによって異なります。たとえば、コミッターがプロジェクトのライセンスに基づいて作品を提出する権利を持っていることを証明したり、開発者の原産地証明書などの寄稿者の代表に同意したりする場合があります。(LinuxカーネルおよびGitプロジェクトで使用されるものについては、http://developercertificate.orgを参照してください)。プロジェクトでsignoffがどのように使用されるかを理解するには、貢献しているプロジェクトのドキュメントまたはリーダーシップ(leadership)を参照してください。
--no-signoffオプションを使用すると、コマンドラインで以前の--signoffオプションを無効にすることができます。 -
--stat -
-n -
--no-stat -
マージの最後にdiffstatを表示します。 diffstatは、構成オプションmerge.statによっても制御されます。
-nまたは--no-statを使用すると、マージの最後に diffstat が表示されません。 -
--squash -
--no-squash -
(マージ情報を除く)実際のマージが発生したかのように作業ツリーとインデックスの状態を生成しますが、実際にコミットしたり、
HEADを移動したり、 (次のgit commitコマンドでマージコミットを作成する、)$GIT_DIR/MERGE_HEADを記録したりしないでください。 これにより、現在のブランチの上に単一のコミットを作成できます。その効果は、別のブランチ(または octopusの場合はそれ以上)をマージするのと同じです。--no-squashを使用してマージを実行し、結果をコミットします。 このオプションは、--squashをオーバーライドするために使用できます。--squashを使用すると、--commitは許可されず、失敗します。 -
--no-verify -
このオプションは、pre-mergeフックとcommit-msgフックをバイパスします。 githooks(5) も参照してください。
-
-s <strategy> -
--strategy=<strategy> -
指定されたマージ戦略を使用します。 試行する順序を指定するために、複数回指定できます。
-sオプションがない場合は、代わりに組み込みの戦略リストが使用されます(単一のヘッドをマージする場合はort、それ以外の場合はoctopus)。 -
-X <option> -
--strategy-option=<option> -
マージ戦略固有のオプションをマージ戦略に渡します。
-
--verify-signatures -
--no-verify-signatures -
マージされるサイドブランチの先端コミットが有効なキー、つまり有効なuidを持つキーで署名されていることを確認します。デフォルトの信頼モデルでは、これは署名キーが信頼できるキーによって署名されていることを意味します。サイドブランチの先端コミットが有効なキーで署名されていない場合、マージは中止されます。
-
--summary -
--no-summary -
--statおよび--no-statの同義語。 これらは非推奨であり、将来削除される予定です。 -
-q -
--quiet -
静かに実行します。
--no-progressの指定を含んでいます。 -
-v -
--verbose -
にぎやかにします。
-
--progress -
--no-progress -
進行状況を明示的にオン/オフにします。 どちらも指定されていない場合、標準エラーが端末に接続されていれば進行状況が表示されます。 すべてのマージ戦略が進捗レポートをサポートしているわけではないことに注意してください。
-
--autostash -
--no-autostash -
操作を開始する前に一時的なスタッシュエントリを自動的に作成し、それを特別なref
MERGE_AUTOSTASHに記録し、操作の終了後にapplyします。 これは、ダーティワークツリーで操作を実行できることを意味します。 ただし、注意して使用してください。マージが成功した後の最後のstashアプリケーションは、深刻な競合を引き起こす可能性があります。 -
--allow-unrelated-histories -
デフォルトでは、
git mergeコマンドは、共通の祖先を共有しない履歴のマージを拒否します。 このオプションは、独立して産まれた2つのプロジェクトの履歴をマージするときにこのセーフティを無効にするために使用できます。 これは非常にまれなケースであるため、これをデフォルトで有効にする構成変数は存在せず、今後も追加されません。 -
-m <msg> -
マージコミットに使用するコミットメッセージを設定します(マージコミットが作成された場合)。
--logが指定されている場合、マージされるコミットのショートログが与えられたメッセージに追加されます。git fmt-merge-msgコマンドを使用して、自動化されたgit merge呼び出しに適切なデフォルトを与えることができます。 自動メッセージには、ブランチの説明を含めることができます。 -
-F <file> -
--file=<file> -
マージコミットに使用されるコミットメッセージを読み取ります(マージコミットが作成された場合)。
--logが指定されている場合、マージされるコミットのショートログが与えられたメッセージに追加されます。 -
--rerere-autoupdate -
--no-rerere-autoupdate -
可能であれば、rerereメカニズムが自動競合解決の結果でインデックスを更新できるようにします。
-
--overwrite-ignore -
--no-overwrite-ignore -
マージ結果から無視されたファイルを黙って上書きします。 これがデフォルトの動作です。 中止(abort)するには、
--no-overwrite-ignoreを使用します。 -
--abort -
現在の競合解決プロセスを中止(abort)し、マージ前の状態を再構築してみてください。 自動スタッシュエントリが存在する場合は、それをワークツリーに適用します。
マージの開始時にコミットされていないワークツリーの変更が存在した場合、
git merge --abortは、これらの変更を再構築できない場合があります。 したがって、git mergeを実行する前に、常にあなたの変更をコミット、またはスタッシュしておくことをお勧めします。git merge --abortは、MERGE_HEADがある場合はgit reset --mergeと同じです。ただしMERGE_AUTOSTASHもある場合はgit merge --abortはスタッシュエントリをワークツリーに適用しますが、git reset --mergeは スタッシュリストにスタッシュした変更を保持したままにします。 -
--quit -
進行中の現在のマージを忘れさせます。 インデックスと作業ツリーはそのままにしておきます。
MERGE_AUTOSTASHが存在する場合、スタッシュエントリはスタッシュリストに保存されます。 -
--continue -
競合が原因で
git mergeが停止(stop)した後で、git merge --continueを実行してマージを終了できます(下記「HOW TO RESOLVE CONFLICTS」セクション参照)。 - <commit>…
-
私たちのブランチにマージするコミットです。通常は他のブランチヘッドです。 複数のコミットを指定すると、3つ以上の親とのマージが作成されます(Octopusマージという愛称で親しまれています)。
コマンドラインからコミットが指定されていない場合は、現在のブランチがアップストリームとして使用するように構成されているリモート追跡ブランチをマージします。 このマニュアルページの構成(configuration)セクションも参照してください。
FETCH_HEAD` が指定された場合(他のコミットは指定しない場合)、直前の
git fetchによるマージによって.git/FETCH_HEADファイルに記録されたブランチは、現在のブランチにマージされます。
PRE-MERGE CHECKS
外部の変更を適用する前に、自分の作業を良好な状態にしてローカルでコミットしとく必要があります。これにより、競合が発生した場合に作業が中断されることはなくなります。
git-stash(1) も参照してください。 git pull/git merge は、ローカルのコミットされていない変更が
git pull/git merge の更新が必要なファイルと重複する場合、何もせずに停止(stop)します。
マージコミットに無関係な変更が記録されないようにするために、 HEAD コミットに関連する変更がインデックスに登録されている場合、 git
pull と git merge も中止(abort)されます。
(使用されているマージ戦略によっては、このルールに対する特別な狭い例外が存在する場合がありますが、通常、インデックスはHEADと一致する必要があります。)
すべての名前付きコミットがすでに HEAD の祖先である場合、git merge は "Already up to date."
(既に最新です)というメッセージで早期に終了(exit)します。
FAST-FORWARD MERGE
多くの場合、現在のブランチヘッドは、指定のコミットの祖先です。 これは、特に git pull から呼び出された場合に最も一般的なケースです:
例えば、あなたはアップストリームリポジトリを追跡していて、ローカルの変更をコミットしていないので、新しいアップストリームリビジョンに更新する必要があります。
この場合、結合された履歴を保存するために新しいコミットは必要ありませんが、代わりに、「HEAD」(およびインデックス)は、追加のマージコミットを作成せずに、指定のコミットを指すように更新されます。
この振る舞いは、--no-ff オプションで抑制できます。
TRUE MERGE
早送りマージ(fast-forward merge)(上記参照)を除いて、マージされるブランチは、両方を親として持つマージコミットによって結合する必要があります。
マージされるすべてのブランチの変更を調整したマージバージョンがコミットされ、HEAD、インデックス、作業ツリーがそのコミットに更新されます。
作業ツリーには、重ならない限りは変更を加えることができます。
変更を調停する方法が明確でない場合、以下のようになります:
-
HEADポインタは同一のままです。 -
MERGE_HEADref は、他方のブランチヘッド(the other branch head)を指すように設定されています。 -
正常にマージされたパスは、インデックスファイルとあなたの作業ツリーの両方で更新されます。
-
競合するパスの場合、インデックスファイルには最大3つのバージョンが記録されます: ステージ1は、共通の祖先からのバージョンを格納し、ステージ2 は
HEADからのバージョン、 ステージ3 はMERGE_HEADからのバージョンです(あなたはgit ls-files -uでステージを検査できます)。 作業ツリーファイルには、「マージ」プログラムの結果が含まれています。 つまり、おなじみの競合マーカー<<<===>>>を使用した3方向マージの結果です。 -
その他の変更は行われません。 特に、マージを開始する前に行ったローカルの変更は同じままであり、それらのインデックスエントリはそのまま、つまり「HEAD」と一致します。
試しにマージした結果、複雑な競合が発生してしまったのでやり直したいという場合は、 git merge --abort
で回復(recover)することができます。
MERGING TAG
注釈付きの(可能ならば署名された)タグをマージする場合、早送りマージが可能であっても、Gitは常にマージコミットを作成し、コミットメッセージテンプレートはタグメッセージ付きで準備されます。 さらに、タグが署名されている場合、シグネチャチェックはメッセージテンプレートのコメントとして報告されます。 git-tag(1) も参照してください。
たまたまタグ付けされたコミットにつながる作業と統合し、例えば、アップストリームのリリースポイントと同期したい場合、あなたは不要なマージコミットを作成したくない場合があります。
このような場合、タグを git merge にフィードする前に自分で「包装を解く」(unwrap)か、自分で作業を行わない場合は
--ff-only を渡すことができます。 例えば以下ようにします
git fetch origin
git merge v1.2.3^0
git merge --ff-only v1.2.3
HOW CONFLICTS ARE PRESENTED
マージ中に、作業ツリーのファイルが更新されてマージの結果が反映されます。 共通の祖先のバージョンに加えられた変更の中で、重複しないもの(つまり、ファイルの領域を変更し、反対側がその領域をそのままにしておく、またはその逆)が最終結果にそのまま組み込まれます。 ただし、両方の側が同じ領域に変更を加えた場合、Gitは一方の側をもう一方の側からランダムに選択することはできず、両方の側がその領域に行ったことをファイルに残してあなたに解決するように求めます。
デフォルトでは、GitはRCSスイートの「マージ」プログラムで使用されるものと同じスタイルを使用して、以下のように競合するハンクを表示します:
Here are lines that are either unchanged from the common
ancestor, or cleanly resolved because only one side changed.
<<<<<<< yours:sample.txt
Conflict resolution is hard;
let's go shopping.
=======
Git makes conflict resolution easy.
>>>>>>> theirs:sample.txt
And here is another line that is cleanly resolved or unmodified.
競合する変更のペアが発生した領域は、マーカー <<<<<<< 、 ======= 、 >>>>>>> でマークされます。
======= の前の部分は通常あなた側(your side)であり、後の部分は通常彼ら側(their side)です。
デフォルトの形式では、競合している部分でオリジナルが何を言っているのかは分かりません。 自分側の何行が削除され、バービー人形の発言に置き換えられているのかは分かりません。 唯一わかるのは、あなた側(your side)は大変だから買い物に行きたいと言いたいのに、相手側(the other size)は簡単だと主張したいということです。
merge.conflictStyle 構成変数を diff3 に設定することで、別のスタイルを使用できます。 diff3
スタイルでは、上記の競合は以下のようになります:
Here are lines that are either unchanged from the common
ancestor, or cleanly resolved because only one side changed.
<<<<<<< yours:sample.txt
Conflict resolution is hard;
let's go shopping.
|||||||
Conflict resolution is hard.
=======
Git makes conflict resolution easy.
>>>>>>> theirs:sample.txt
And here is another line that is cleanly resolved or unmodified.
<<<<<<< 、 ======= 、 >>>>>>> マーカーに加えて、||||||| マーカーにオリジナルのテキストが続きます。
オリジナルは事実を述べただけであり、あなたの側(your side)は単にその声明に屈して諦めたのに対し、他の側(the oter
side)はより前向きな態度をとろうとしたことがわかります。 オリジナルを表示することで、より良い解決策を思い付くことができる場合があります。
HOW TO RESOLVE CONFLICTS
競合を目にした後、あなたは以下の2つのことができます:
-
マージしないことを決定します。 必要なクリーンアップは、インデックスファイルを
HEADコミットにリセットして (2) をリバースし、 (2) と (3) によって行われた作業ツリーの変更をクリーンアップすることだけです。 これにはgit merge --abortを使用できます。 -
競合を解決します。 Gitは、作業ツリーの競合をマークします。 ファイルを編集して形にし、
git addしてインデックスに追加します。git commitまたはgit merge --continueを使用して、取引を成立させます。 後者のコマンドは、git commitを呼び出す前に、進行中の(中断(interrupted)された)マージがあるかどうかをチェックします。
あなたはいくつかの道具を使用して、競合を解決できます:
-
mergetoolの利用。 あなたが
git mergetoolを実行すると、グラフィカルな mergetool が起動し、マージ作業を行えます。 -
diffを見てください。
git diffは3方向の差分を表示し、HEADバージョンとMERGE_HEADバージョンの両方からの変更を強調表示します。 -
各ブランチからのdiffを見てください。
git log --merge -p <path>は、最初にHEADバージョンの差分を表示し、次にMERGE_HEADバージョンを表示します。 -
オリジナルを見てください。
git show :1:filenameは共通の祖先を示し、git show :2:filenameはHEADバージョンを示し、git show :3:filenameはMERGE_HEADバージョンを示します。
EXAMPLES
-
現在のブランチにブランチ
fixesとenhancementsをマージし、octopusマージします:$ git merge fixes enhancements -
oursマージ戦略を使用して、ブランチobsoleteを現在のブランチにマージします:$ git merge -s ours obsolete -
ブランチ
maintを現在のブランチにマージしますが、新しいコミットを自動的に行わないでください:$ git merge --no-commit maintこれは、マージにさらに変更を加えたい場合、または独自のマージコミットメッセージを作成したい場合に使用できます。
大幅な変更をマージコミットに忍び込ませるために、このオプションを悪用することは控えてください。 bumping release(微修正)/version name(バージョン名変更) のような小さな修正は許容されます。
MERGE STRATEGIES
マージ機構(git merge と git pull コマンド)では、バックエンドの「マージ戦略」を -s
オプションで選択することができます。 いくつかの戦略では、独自のオプションを指定することができます。これは、 git merge や git
pull に -X<option> 引数として渡すことができます。
- ort
-
これは、1つのブランチをプルまたはマージするときのデフォルトのマージ戦略です。この戦略では、3方向マージアルゴリズムを使用して2つのヘッドのみを解決できます。3方向マージに使用できる共通の祖先が複数ある場合は、共通の祖先のマージされたツリーを作成し、それを3方向のマージの参照ツリーとして使用します。これにより、Linux 2.6カーネルの開発履歴から取得した実際のマージコミットで実行されたテストによって、誤ったマージを引き起こすことなく、マージの競合が少なくなることが報告されています。さらに、この戦略では、名前の変更を伴うマージを検出して処理できます。検出されたコピーは使用しません。このアルゴリズムの名前は "Ostensibly Recursive’s Twin" (表面上は再帰の双子)の頭文字を取ったものであり、以前のデフォルトのアルゴリズムである「recursive」の代わりとして作成されたという事実に由来しています。
ort戦略は、以下のオプションを取ることができます:- ours
-
このオプションは、「our」バージョンを優先することにより、競合するハンクをクリーンに自動解決するように強制します。 our側と競合しない他のツリーからの変更は、マージ結果に反映されます。 バイナリファイルの場合、内容全体がour側から取得されます。
これを「ours」マージ戦略と混同しないでください。この戦略では、他のツリーに何が含まれているのかさえまったく調べません。それは他のツリーが行ったすべてを破棄し、「our」履歴にはその中で起こったすべてが含まれていると宣言します。
- theirs
-
これは「ours」の反対です。 「ours」とは異なり、このmergeオプションを混同する「theirs」マージ戦略はないことに注意してください。
- ignore-space-change
- ignore-all-space
- ignore-space-at-eol
- ignore-cr-at-eol
-
指示されたタイプの空白(whitespace)の変更を含む行を、3方向マージのために変更されていないものとして扱います。行に対する、他の変更と空白(whitespace)の変更との混合は、無視されません。 git-diff(1) の
-bと-wと--ignore-space-at-eolと--ignore-cr-at-eolも参照してください。-
「their」バージョンが行に空白の変更のみを導入する場合、「our」バージョンが使用されます。
-
「our」バージョンで空白の変更が導入されたが、「their」バージョンに大幅な変更が含まれている場合は、「their」バージョンが使用されます。
-
それ以外の場合、マージは通常の方法で進行します。
-
- renormalize
-
これにより、3方向マージを解決するときに、ファイルの3つのステージすべての仮想チェックアウトとチェックインが実行されます。このオプションは、ブランチをさまざまなクリーンフィルターまたは行末正規化ルールとマージするときに使用することを目的としています。詳細については、 gitattributes(5) の「Merging branches with differing checkin/checkout attributes」(チェックイン/チェックアウト属性が異なるブランチのマージ)を参照してください。
- no-renormalize
-
renormalizeオプションを無効にします。 これは、merge.renormalize構成変数をオーバーライドします。 - find-renames[=<n>]
-
名前変更(rename)の検出をオンにし、オプションで類似性のしきい値(similarity threshold)を設定します。これがデフォルトです。 これは、
merge.renames構成変数をオーバーライドします。 git-diff(1) の--find-renamesも参照してください。 - rename-threshold=<n>
-
find-renames=<n>の非推奨の同義語。 - subtree[=<path>]
-
このオプションは「subtree」戦略をさらに発展させたもので、2つの木をマージする際に、どのようにずらせば互いにマッチするかを推測するものである。その代わり、指定されたパスは、2つの木の形が一致するように前置される(または、最初から取り除かれる)。
- recursive
-
これは、3方向マージアルゴリズムを使用して2つのヘッドのみを解決できます。3方向マージに使用できる共通の祖先が複数ある場合は、共通の祖先のマージされたツリーを作成し、それを3方向のマージの参照ツリーとして使用します。 これにより、Linux 2.6カーネルの開発履歴から取得した実際のマージコミットで実行されたテストによって、誤ったマージを引き起こすことなく、マージの競合が少なくなることが報告されています。 さらに、これにより、名前変更を含むマージを検出して処理できます。 検出されたコピーは使用しません。 これは、Git v0.99.9k 〜 v2.33.0 まで、2つのヘッドを解決するためのデフォルトの戦略でした。
「recursive」(再帰的)戦略は「ort」と同じオプションを取る。 しかし、「ort」が無視する3つのオプション(上記には書かれていない)があり、 「recursive」戦略で有用となる可能性がある:
- patience
-
diff-algorithm=patienceの非推奨の同義語。 - diff-algorithm=[patience|minimal|histogram|myers]
-
マージ中に別の差分アルゴリズムを使用すると、重要でない一致行(異なる関数の中括弧など)が原因で発生するミスマージを回避できます。 git-diff(1)
--diff-algorithmも参照してください。注意: 特に、「ort」はdiff-algorithm=histogramを使用しますが、「recursive」はデフォルトで 「diff.algorithm」 設定を使う事に注意して下さい。 - no-renames
-
名前変更(rename)の検出をオフにします。 これは、
merge.renames構成変数をオーバーライドします。 git-diff(1) の--no-renamesも参照してください。
- resolve
-
これは、3方向マージアルゴリズムを使用して、2つのヘッド(つまり、現在のブランチとプルした別のブランチ)のみを解決できます。 交差マージ(criss-cross merge)のあいまいさを注意深く検出しようとします。 名前の変更は処理しません。
- octopus
-
これにより、3つ以上のヘッドを持つケースが解決されますが、手動解決が必要な複雑なマージの実行は拒否されます。これは主に、トピックの分岐ヘッドを纏めるために使用されることを意図しています。これは、複数のブランチをプルまたはマージする場合のデフォルトのマージ戦略です。
- ours
-
これにより、任意の数のヘッドが解決されますが、結果として得られるマージのツリーは常に現在のブランチヘッドのツリーであり、他のすべてのブランチからのすべての変更を事実上無視します。 これは、サイドブランチの古い開発履歴に取って代わるために使用されることを意図しています。 これは、「recursive」マージ戦略の
-Xoursオプションとは異なることに注意してください。 - subtree
-
これは改造された「ort」戦略です。 ツリーAとBをマージするとき、BがAのサブツリーに対応する場合、同じレベルのツリーを読み取るのではなく、Bは最初にAのツリー構造に一致するように調整されます。 この調整は、共通の祖先ツリーに対しても行われます。
3方向マージ(デフォルトの「ort」を含む)を使用する戦略では、両方のブランチで変更が行われたが、後で一方のブランチで元に戻された場合、その変更はマージされた結果に表示されます。一部の人々は、この振る舞いを混乱させると感じています。これは、個々のコミットではなく、ヘッドとマージベースのみがマージの実行時に考慮されるために発生します。したがって、マージアルゴリズムは、元に戻された変更をまったく変更なしと見なし、代わりに変更されたバージョンに置き換えます。
CONFIGURATION
- merge.conflictStyle
-
マージ時に競合するハンクが作業ツリーファイルに書き出されるスタイルを指定します。 デフォルトは「merge」です。これは、
<<<<<<<競合マーカー、一方の側で行われた変更、=======マーカー、もう一方の側で行われた変更、そして>>>>>>>マーカーというスタイルです。 別のスタイル「diff3」は、|||||||マーカーと元のテキストを=======マーカーの前に追加します。 - merge.defaultToUpstream
-
コミット引数なしでmergeが呼び出された場合は、リモート追跡ブランチに格納されている最後に観測された値を使用して、現在のブランチ用に構成されたアップストリームブランチをマージします。
branch.<currentbranch>.remoteによって指定されたリモートのブランチに名前を付けるbranch.<currentbranch>.mergeの値が参照され、次に、それらはremote.<remote>.fetchを介して対応するリモート追跡ブランチにマッピングされ、そして、これらの追跡ブランチの先端がマージされます。 デフォルトはtrueです。 - merge.ff
-
デフォルトでは、Gitは、現在のコミットの子孫であるコミットをマージするときに、追加のマージコミットを作成しません。 代わりに、現在のブランチの先端が早送り(fast-forward)されます。
falseに設定すると、この変数はGitにそのような場合に追加のマージコミットを作成するように指示します(コマンドラインから--no-ffオプションを指定するのと同じです)。onlyに設定すると、そのような早送りマージのみが許可されます(コマンドラインから--ff-onlyオプションを指定するのと同じです)。 - merge.verifySignatures
-
trueの場合、これは
--verify-signaturesコマンドラインオプションと同等です。 詳細については、 git-merge(1) を参照してください。 - merge.branchdesc
-
ブランチ名に加えて、それらに関連付けられたブランチの説明テキストをログメッセージに入力します。デフォルトはfalseです。
- merge.log
-
ブランチ名に加えて、マージされる実際のコミットからの最大「指定の数」の親コミットの1行説明をログメッセージに入力します。デフォルトはfalseで、trueは20の同義語です。
- merge.suppressDest
-
統合ブランチの名前に一致するグロブをこの複数値の構成変数(multi-valued configuration variable)に追加することにより、これらの統合ブランチへのマージに対して計算されるデフォルトのマージメッセージは、タイトルから「into <branch name>」を省略します。
空の値を持つ要素を使用して、以前の構成エントリから蓄積されたグロブのリストをクリアできます。
merge.suppressDest変数が定義されていない場合、下位互換性のためにデフォルト値のmasterが使用されます。 - merge.renameLimit
-
マージ処理中に名前変更検出の網羅的な部分で考慮するファイルの数。 指定されない場合、デフォルトは diff.renameLimit の値です。 merge.renameLimit と diff.renameLimit の両方が指定されていない場合、現在のデフォルトは 7000 です。 この設定は、名前変更検出がオフの場合は効果がありません。
- merge.renames
-
Gitが名前の変更を検出するかどうか。 「false」に設定すると、名前変更の検出が無効になります。 「true」に設定すると、基本的な名前変更の検出が有効になります。 デフォルトは diff.renames の値です。
- merge.directoryRenames
-
Gitがディレクトリの名前変更を検出するかどうか。これは、履歴の一方の側でディレクトリが名前変更されたときに、もう一方の側で追加された新しいファイルがマージ時にどうなるのかに影響します。 merge.directoryRenames を
falseに設定すると、ディレクトリの名前変更の検出は無効になります。つまり、そのような新しいファイルは古いディレクトリに残されます。trueに設定すると、ディレクトリの名前変更検出が有効になり、そのような新しいファイルは新しいディレクトリに移動されることを意味します。conflictに設定すると、そのようなパスに対して競合が報告されます。 merge.renames が false の場合、merge.directoryRenames は無視され、false として扱われます。 デフォルトはconflictです。 - merge.renormalize
-
リポジトリ内のファイルの標準の表現が時間の経過とともに変更されたことをGitに伝えます(たとえば、以前はCRLF行末のレコードテキストファイルをコミットしていましたが、最近のファイルはLF行末を使用している)。 このようなリポジトリでは、Gitは、不必要な競合を減らすために、マージを実行する前に、コミットに記録されたデータを標準形式に変換できます。 詳細については、gitattributes(5) の「Merging branches with differing checkin/checkout attributes」(チェックイン/チェックアウト属性が異なるブランチのマージ)のセクションを参照してください。
- merge.stat
-
マージの最後にORIG_HEADとマージ結果の間のdiffstatを出力するかどうか。 デフォルトではtrue。
- merge.autoStash
-
trueに設定すると、操作を開始する前に一時的なstashエントリを自動的に作成し、操作の終了後に適用します。 これは、ダーティ作業ツリーでマージを実行できることを意味します。 ただし、注意して使用してください。マージが成功した後の最後のstashアプリケーションは、重要な競合を引き起こす可能性があります。 このオプションは、 git-merge(1)の
--no-autostashおよび--autostashオプションでオーバーライドできます。 デフォルトはfalseです。 - merge.tool
-
git-mergetool(1) が使用するマージツールを制御します。 以下のリストは、有効な組み込み値を示しています。その他の値はカスタムマージツールとして扱われ、対応する mergetool.<tool>.cmd 変数が定義されている必要があります。
- merge.guitool
-
-g/--guiフラグが指定されている場合に、 git-mergetool(1) が使用するマージツールを制御します。以下のリストは、有効な組み込み値を示しています。 その他の値はカスタムマージツールとして扱われ、対応する mergetool.<guitool>.cmd 変数が定義されている必要があります。-
araxis
-
bc
-
bc3
-
bc4
-
codecompare
-
deltawalker
-
diffmerge
-
diffuse
-
ecmerge
-
emerge
-
examdiff
-
guiffy
-
gvimdiff
-
gvimdiff1
-
gvimdiff2
-
gvimdiff3
-
kdiff3
-
meld
-
nvimdiff
-
nvimdiff1
-
nvimdiff2
-
nvimdiff3
-
opendiff
-
p4merge
-
smerge
-
tkdiff
-
tortoisemerge
-
vimdiff
-
vimdiff1
-
vimdiff2
-
vimdiff3
-
winmerge
-
xxdiff
-
- merge.verbosity
-
再帰的マージ戦略によって示される出力の量を制御します。 レベル0は、競合が検出された場合の最終エラーメッセージ以外は何も出力しません。 レベル1は競合のみを出力し、レベル2は競合とファイル変更を出力します。 レベル5以上はデバッグ情報を出力します。 デフォルトはレベル2です。
GIT_MERGE_VERBOSITY環境変数でオーバーライドできます。 - merge.<driver>.name
-
カスタムの低レベルマージドライバーの人間が読める名前を定義します。 詳細については、 gitattributes(5) を参照してください。
- merge.<driver>.driver
-
カスタムの低レベルのマージドライバーを実装するコマンドを定義します。 詳細については、 gitattributes(5) を参照してください。
- merge.<driver>.recursive
-
共通の祖先間で内部マージを実行するときに使用される低レベルのマージドライバーに名前を付けます。 詳細については、 gitattributes(5) を参照してください。
- branch.<name>.mergeOptions
-
ブランチ <name> にマージするためのデフォルトオプションを設定します。 構文とサポートされているオプションは
git mergeのものと同じですが、空白文字を含むオプション値は現在サポートされていません。
SEE ALSO
GIT
Part of the git(1) suite