SYNOPSIS
git mergetool [--tool=<tool>] [-y | --[no-]prompt] [<file>…]
DESCRIPTION
git mergetool を使用して、いくつかのマージユーティリティの1つを実行し、マージの競合を解決します。通常、 git merge
の後に実行されます。
1つ以上の <file>
パラメーターが指定されている場合、マージツールプログラムが実行され、その各ファイルの違いが解決されます(競合のないものはスキップされます)。ディレクトリを指定すると、そのパスにあるすべての未解決のファイルが含まれます。ファイル名が指定されていない場合、
git mergetool は、マージで競合するすべてのファイルに対してマージツールプログラムを実行します。
OPTIONS
-
-t <tool> -
--tool=<tool> -
<tool> で指定したマージ解決プログラムを使用します。 有効な値には emerge、gvimdiff、kdiff3、meld、vimdiff、tortoisemerge が含まれます。有効な <tool> 設定のリストについては、
git mergetool --tool-helpを実行してください。マージ解決プログラムが指定されていない場合、
git mergetoolは構成変数merge.toolを使用します。 構成変数merge.toolが設定されていない場合、git mergetoolは適切なデフォルトを選択します。あなたは構成変数
mergetool.<tool>.pathを設定することにより、ツールへのフルパスを明示的に指定できます。たとえば、mergetool.kdiff3.pathを設定することにより、kdiff3への絶対パスを構成できます。それ以外の場合、git mergetoolはツールがPATHで使用可能であると想定します。既知のマージツールプログラムの1つを実行する代わりに、構成変数
mergetool.<tool>.cmdで呼び出すコマンドラインを指定することにより、git mergetoolをカスタマイズして代替プログラムを実行できます。(
-tまたは--toolまたはmerge.tool構成変数のいずれかを介して)git mergetoolをこのツールで呼び出すと、構成されたコマンドラインが呼び出され、$BASEがマージの共通ベースを含む一時ファイルの名前に設定され、使用可能な場合、$LOCALは現在のブランチのファイルの内容を含む一時ファイルの名前に設定され、$REMOTEはマージされるファイルの内容を含む一時ファイルの名前に設定され、$REMOTEはマージされるファイルの内容を含む一時ファイルの名前に設定されます。カスタムマージツールがその終了コードでマージ解決の成功を正確に示している場合、構成変数
mergetool.<tool>.trustExitCodeをtrueに設定できます。それ以外の場合、git mergetoolは、カスタムツールが終了した後、解決の成功を示すようにユーザーに促します。 -
--tool-help -
--toolで使用できるマージツールのリストを出力します。 -
-y -
--no-prompt -
マージ解決プログラムを呼び出す前にプロンプトを表示しないでください。これは、マージ解決プログラムが
--toolオプションまたはmerge.tool構成変数で明示的に指定されている場合のデフォルトです。 -
--prompt -
マージ解決プログラムを呼び出す前にプロンプトを表示して、ユーザーにパス(path)をスキップする機会を与えます。
-
-g -
--gui -
git-mergetoolが-gまたは--guiオプションを伴って呼び出されると、デフォルトのマージツールはmerge.toolではなく設定されたmerge.guitool変数から読み取られます。merge.guitoolが設定されていない場合、merge.toolで構成されたツールにフォールバックします。 -
--no-gui -
これにより、以前の
-gまたは--gui設定が上書きされ、デフォルトのマージツールは構成されたmerge.tool変数から読み取られます。 -
-O<orderfile> -
<orderfile> で指定された順序でファイルを処理します。これには、1行に1つのシェルグロブパターンがあります。 これは
diff.orderFile構成変数をオーバーライドします(git-config(1) を参照)。diff.orderFileをキャンセルするには、-O/dev/nullを使用します。
CONFIGURATION
このセクションの以下のすべては、 git-config(1) ドキュメントの抜粋です。 内容は git-config(1) ドキュメント にあるものと同一です:
- mergetool.<tool>.path
-
指定のツール(<tool>)のパスを上書きします。 これは、ツールがPATH上にない場合に役立ちます。
- mergetool.<tool>.cmd
-
指定のマージツール(<tool>)を呼び出すコマンドを指定します。指定されたコマンドは、次の変数を使用してシェルで評価されます:
BASEは、マージされるファイルの共通ベースを含む一時ファイルの名前です(使用可能な場合)。LOCALは、現在のブランチのファイルの内容を含む一時ファイルの名前です。REMOTEは、マージされるブランチのファイルの内容を含む一時ファイルの名前です。MERGEDは、マージツールが正常なマージの結果を書き込むファイルの名前が含まれています。 - mergetool.<tool>.hideResolved
-
ユーザーが特定のツール(<tool>)のグローバルな
mergetool.hideResolved値をオーバーライドできるようにします。 詳細については、mergetool.hideResolvedを参照してください。 - mergetool.<tool>.trustExitCode
-
カスタムマージコマンドの場合、マージコマンドの終了コードを使用してマージが成功したかどうかを判断できるかどうかを指定します。 これがtrueで無い場合、マージターゲットファイルのタイムスタンプがチェックされ、ファイルが更新されている場合はマージが成功したと見なされます。そうでない場合、ユーザーはマージの成功を示すように求められます。
- mergetool.meld.hasOutput
-
古いバージョンの
meldは--outputオプションをサポートしていません。 Gitは、meld --helpの出力を調べることで、meldが--outputをサポートしているかどうかを検出しようとします。mergetool.meld.hasOutputを設定すると、Gitはこれらのチェックをスキップし、代わりに設定された値を使用します。mergetool.meld.hasOutputをtrueに設定すると、Gitは無条件に--outputオプションを使用するようになり、falseは--outputの使用を回避します。 - mergetool.meld.useAutoMerge
-
meld は
--auto-mergeが指定されると、競合しないすべての部分を自動的にマージし、競合する部分を強調表示して、ユーザーの決定を待ちます。mergetool.meld.useAutoMergeを`true`に設定すると、Gitは--auto-mergeオプションをmeldで無条件に使用するようになります。 この値をautoに設定すると、gitは--auto-mergeがサポートされているかどうかを検出し、使用可能な場合にのみ--auto-mergeを使用します。falseの値はデフォルト値で、` --auto-merge` の使用を完全に回避します。 - mergetool.vimdiff.layout
-
vimdiff バックエンドはこの変数を使用して、分割されたウィンドウがどのように見えるかを制御します。 マージ・ツールとして Neovim(
nvim) または gVim(gvim) を使用している場合でも適用されます。 詳細については、「BACKEND SPECIFIC HINTS」セクションを参照してください。 - mergetool.hideResolved
-
マージ処理中、Gitは可能な限り多くの競合を自動的に解決し、解決できない競合の周りに競合マーカーを含ませた
MERGEDファイルを書き込みます。 「LOCAL」と「REMOTE」は通常、Gitの競合解決前のファイルのバージョンを表します。 この設定により、「LOCAL」と「REMOTE」が上書きされ、未解決の競合のみがマージツールに表示されます。mergetool.<tool>.hideResolved構成変数を介してツールごとに構成できます。 デフォルトはfalseです。 - mergetool.keepBackup
-
マージを実行した後、競合マーカーを含む元のファイルを、拡張子
.origのファイルとして保存できます。 この変数がfalseに設定されている場合、このファイルは保存されません。 デフォルトはtrueです(つまり、バックアップファイルを保持します)。 - mergetool.keepTemporaries
-
カスタムマージツールを呼び出すとき、Gitは一時ファイルの組をツールに渡します。 ツールがエラーを返し、この変数が
trueに設定されている場合、これらの一時ファイルは保持されます。それ以外の場合、ツールの終了後に削除されます。 デフォルトはfalseです。 - mergetool.writeToTemp
-
Gitは、デフォルトで、競合するファイルの一時的な 「BASE」バージョンと「LOCAL」バージョンと「REMOTE」バージョンをワークツリーに書き込みます。
trueに設定すると、Gitはこれらのファイルに一時ディレクトリを使用しようとします。 デフォルトはfalseです。 - mergetool.prompt
-
マージ解決プログラムを呼び出す前にプロンプトを表示します。
TEMPORARY FILES
git mergetool は、マージの解決中に *.orig バックアップファイルを作成します。これらは、ファイルがマージされ、その git
mergetool セッションが完了したら安全に削除できます。
mergetool.keepBackup 構成変数を false に設定すると、ファイルが正常にマージされたときに、 git
mergetool がバックアップを自動的に削除します。
BACKEND SPECIFIC HINTS
vimdiff
Description
git mergetool で --tool=vimdiff を指定すると、Git は以下のように4つに分割されたウィンドウ・レイアウトで
Vim を開きます:
------------------------------------------
| | | |
| LOCAL | BASE | REMOTE |
| | | |
------------------------------------------
| |
| MERGED |
| |
------------------------------------------
LOCALとBASEとREMOTEは、特定のコミットで競合するファイルの内容を示す読み取り専用バッファーです(それぞれ「マージ先のコミット」と「共通の祖先コミット」と「マージ元のコミット」)。
MERGED は、競合を解決する必要がある書き込み可能なバッファーです(他の読み取り専用バッファーを参照として使用します)。 完了したら、通常どおり
Vim を保存して終了します(:wq)。中止する場合は、:cq を使用して終了します。
Layout configuration
以下の区切り文字が特別な意味を持つ文字列を受け入れる構成変数 mergetool.vimdiff.layout を設定することで、 Vim
が使用するウィンドウ・レイアウトを変更できます:
-
+は「open a new tab」(新しいタブを開く)ために使用されます -
,は「open a new vertical split」(上下分割で開く)ために使用されます -
/は「open a new horizontal split」(左右分割で開く)ために使用されます -
@は、競合を解決した後の最終バージョンを含むファイルを示すために使用されます。 存在しない場合、デフォルトでMERGEDが使用されます。
演算子の優先順位は以下のとおりです(括弧(parentheses)を使用して変更できます):
`@` > `+` > `/` > `,`
これがどのように機能するかを理解するためにいくつかの例を見てみましょう:
-
layout = "(LOCAL,BASE,REMOTE)/MERGED"これは、すでに見たデフォルトのレイアウトとまったく同一です。
注意:
/は,よりも優先されるため、この場合は括弧は不要であることに注意してください。 つまり以下のレイアウト定義と同等です:layout = "LOCAL,BASE,REMOTE / MERGED" -
layout = "LOCAL,MERGED,REMOTE"これは、もし、何らかの理由で
BASEバッファに関心がない場合です。------------------------------------------ | | | | | | | | | LOCAL | MERGED | REMOTE | | | | | | | | | ------------------------------------------ -
layout = "MERGED"MERGEDバッファのみが表示されます。 ただし、他のすべてのものはまだvimにロードされており、buffersコマンドでアクセスできることに注意してください。------------------------------------------ | | | | | MERGED | | | | | ------------------------------------------ -
layout = "@LOCAL,REMOTE"MERGEDがレイアウトに存在しない場合、バッファの 1 つをアスタリスク(*)で「マーク」する必要があります。 これは、競合を解決した後に編集して保存する必要があるバッファーになります。------------------------------------------ | | | | | | | | | | LOCAL | REMOTE | | | | | | | | | | ------------------------------------------ -
layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE"3つのタブが開かれます: 最初の 1 つはデフォルト・レイアウトのコピーで、残りの 2 つはそれぞれ (
BASEとLOCAL) と (BASEとREMOTE) の違いのみを示します。------------------------------------------ | <TAB #1> | TAB #2 | TAB #3 | | ------------------------------------------ | | | | | LOCAL | BASE | REMOTE | | | | | ------------------------------------------ | | | MERGED | | | ------------------------------------------------------------------------------------ | TAB #1 | <TAB #2> | TAB #3 | | ------------------------------------------ | | | | | | | | | | BASE | LOCAL | | | | | | | | | | ------------------------------------------------------------------------------------ | TAB #1 | TAB #2 | <TAB #3> | | ------------------------------------------ | | | | | | | | | | BASE | REMOTE | | | | | | | | | | ------------------------------------------ -
layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL/BASE/REMOTE),MERGED"前の例と同一ですが、最初のタブと同じ情報を持つ 4 番目のタブを別のレイアウトで追加します。
--------------------------------------------- | TAB #1 | TAB #2 | TAB #3 | <TAB #4> | --------------------------------------------- | LOCAL | | |---------------------| | | BASE | MERGED | |---------------------| | | REMOTE | | ---------------------------------------------注意: 3 番目のタブ定義では、括弧を使用して
,を/よりも優先する必要があることに注意してください。
Variants
--tool=vimdiff の代わりに、これらの他の派生のいずれかを使用することもできます:
-
--tool=gvimdiffは Vim の代わりに gVim を開きます。 -
--tool=nvimdiffは Vim の代わりに Neovim を開きます。
これらの派生を使用する場合、カスタム・レイアウトを指定するには、構成変数 mergetool.vimdiff.layout の代わりに
mergetool.gvimdiff.layout と mergetool.nvimdiff.layout を設定する必要があります。
さらに、以前の Git バージョンとの後方互換性を保つために、 vimdiff や、その派生 (たとえば vimdiff3 、
nvimdiff1 等) の名前の後ろに 1 , 2 , 3 を追加して、定義済みのレイアウトを使用することも可能です。 言い換えると、
--tool=[g,n,]vimdiffx を使用するということは、 --tool=[g,n,]vimdiff を使用し、かつ、設定変数
mergetool.[g,n,]vimdiff.layout を以下のように設定するのと同じことです。 (訳注:
--tool=[g,n,]vimdiffx → --tool=vimdiff1, --tool=vimdiff2,
--tool=vimdiff3, --tool=gvimdiff1, --tool=gvimdiff2,
--tool=gvimdiff3, --tool=nvimdiff1, --tool=nvimdiff2,
--tool=nvimdiff3)
-
x=1:"@LOCAL, REMOTE" -
x=2:"LOCAL, MERGED, REMOTE" -
x=3:"MERGED"
例: --tool=gvimdiff2 を使用すると、 gvim が 3 つの列 (LOCAL、MERGED、REMOTE) で開きます。
GIT
Part of the git(1) suite