SYNOPSIS

git mergetool [--tool=<tool>] [-y | --[no-]prompt] [<file>…]

DESCRIPTION

git mergetool を使用して、いくつかのマージユーティリティの1つを実行し、マージの競合を解決します。通常、 git merge の後に実行されます。

1つ以上の <file> パラメーターを指定した場合、 マージツールプログラムが実行され、 各ファイルの差異を解決します(競合のないものはスキップされます)。 ディレクトリを指定すると、 そのパス内にある全ての未解決のファイルが対象となります。 ファイル名(<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 にはマージされるファイルの内容を含む一時ファイルの名前が設定されます。 $MERGED にはマージツールがマージ解決の結果を書き込むべきファイルの名前が設定されます。

カスタムマージツールがその終了コードでマージ解決の成功を正確に示している場合、構成変数 mergetool.<tool>.trustExitCodetrue に設定できます。それ以外の場合、 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 で構成されたツールにフォールバックします。 これは構成変数 mergetool.guiDefault を使用して自動選択できます。

--no-gui

これは、 それ以前の -g または --gui 設定または mergetool.guiDefault 設定をオーバーライドし、 設定された 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

カスタム・マージ・コマンドの場合、 マージ・コマンドの終了コード(exit code)を使用してマージが成功したかどうかを判断できるかどうかを指定します。 これが true で無い場合、 マージ・ターゲット・ファイルのタイム・スタンプがチェックされ、 ファイルが更新されている場合はマージが成功したと見なされます。 そうでない場合、 ユーザーはマージの成功を示すようプロンプトを表示します。

mergetool.meld.hasOutput

古いバージョンの meld--output オプションをサポートしていません。 Gitは、 meld --help の出力を調べることで、 meld--output をサポートしているかどうかを検出しようとします。 mergetool.meld.hasOutput を設定すると、Gitはこれらのチェックをスキップし、代わりに設定された値を使用します。 mergetool.meld.hasOutputtrue に設定すると、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` の使用を完全に回避します。 デフォルトは false です。

mergetool.<vimdiff variant>.layout

vimdiff のバリエーション(<variant>)である、 vimdiff` や nvimdiffgvimdiff のいずれかの分割ウィンドウ・レイアウトを構成します。 --tool=<variant> を指定して(または、merge.tool<variant> として設定されている場合は --tool 無しで、) git mergetool を起動すると、 Git は mergetool.<variant>.layout を参照してツールのレイアウトを決定します。 バリエーション固有の設定が利用できない場合は、 vimdiff がフォールバックとして使用されます。 それも利用できない場合は、 4 つのウィンドウを含むデフォルトのレイアウトが使用されます。 レイアウトを設定するには、 「BACKEND SPECIFIC HINTS」を参照してください。

mergetool.hideResolved

マージ処理中、 Git は可能な限り多くの競合を自動的に解決し、 解決できない競合の周りに競合マーカーを含ませた MERGED ファイルを書き込みます。 LOCALREMOTE は通常、 Git の競合解決前のファイルのバージョンを表します。 この設定により LOCALREMOTE が上書きされ、 未解決の競合のみがマージ・ツールに表示されます。 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

マージ解決プログラムを呼び出す前にプロンプトを表示します。

mergetool.guiDefault

true を設定するとデフォルトで merge.guitool を使用します(引数 --gui を指定するのと同じです)。 または、 auto を設定すると DISPLAY 環境変数値に応じて merge.guitool または merge.tool を選択します。 デフォルトは falsemerge.guitool を使用するには --gui 引数を明示的に指定する必要があります。

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 つはそれぞれ (BASELOCAL) と (BASEREMOTE) の違いのみを示します。

    ------------------------------------------
    | <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 番目のタブ定義では、 丸括弧(parentheses; ( … ) ) を使用して ,/ よりも優先する必要があることに注意してください。

Variants

--tool=vimdiff の代わりに、これらの他のバリエーションのいずれかを使用することもできます:

  • --tool=gvimdiff は Vim の代わりに gVim を開きます。

  • --tool=nvimdiff は Vim の代わりに Neovim を開きます。

これらのバリエーションを使用する場合、カスタム・レイアウトを指定するには、構成変数 mergetool.vimdiff.layout の代わりに mergetool.gvimdiff.layoutmergetool.nvimdiff.layout を設定する必要があります(ただし、 そのバリエーション固有のものが設定されていない場合、 後者はフォールバックとして使用されます)。

さらに、以前の Git バージョンとの後方互換性を保つために、 vimdiff や、そのバリエーション (たとえば vimdiff3nvimdiff1 等) の名前の後ろに 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