セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.50.1 変更なし
-
2.50.0
2025-06-16
- 2.45.1 → 2.49.1 変更なし
-
2.45.0
2024-04-29
- 2.43.1 → 2.44.4 変更なし
-
2.43.0
2023-11-20
- 2.41.1 → 2.42.4 変更なし
-
2.41.0
2023-06-01
- 2.38.3 → 2.40.4 変更なし
-
2.38.2
2022-12-11
- 2.38.1 変更なし
-
2.38.0
2022-10-02
- 2.37.1 → 2.37.7 変更なし
-
2.37.0
2022-06-27
- 2.31.1 → 2.36.6 変更なし
-
2.31.0
2021-03-15
- 2.22.1 → 2.30.9 変更なし
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 変更なし
-
2.20.0
2018-12-09
- 2.12.5 → 2.19.6 変更なし
-
2.11.4
2017-09-22
- 2.2.3 → 2.10.5 変更なし
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
説明
マージの競合を解決するために、git
mergetool
を使用していくつかのマージユーティリティのいずれかを実行します。これは通常 git
merge
の後に実行されます。
1つ以上の <file> パラメータが指定されている場合、マージツールプログラムは各ファイルの差異を解決するために実行されます(競合のないファイルはスキップされます)。ディレクトリを指定すると、そのパス内の未解決のすべてのファイルが含まれます。<file> 名が指定されていない場合、git
mergetool
はマージの競合があるすべてのファイルに対してマージツールプログラムを実行します。
オプション
-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
で利用可能であると仮定します。既知のマージツールプログラムのいずれかを実行する代わりに、
git
mergetool
は、設定変数mergetool.
<tool>.cmd
で呼び出すコマンドラインを指定することで、代替プログラムを実行するようにカスタマイズできます。git
mergetool
がこのツールで(-t
または--tool
オプションまたはmerge.tool
設定変数を介して)呼び出されると、設定されたコマンドラインは、マージの共通ベースを含む一時ファイルの名前に設定されたBASE
(利用可能な場合)、現在のブランチのファイルの内容を含む一時ファイルの名前に設定されたLOCAL
、マージされるファイルの内容を含む一時ファイルの名前に設定されたREMOTE
、およびマージツールがマージ解決の結果を書き込むべきファイルの名前に設定されたMERGED
で呼び出されます。カスタムマージツールが終了コードでマージ解決の成功を正しく示している場合、設定変数
mergetool.
<tool>.trustExitCode
をtrue
に設定できます。そうでない場合、git
mergetool
はカスタムツールが終了した後、解決の成功を示すようにユーザーに促します。 --tool-help
-
--tool
で使用できるマージツールのリストを表示します。 -y
--no-prompt
-
マージ解決プログラムの呼び出しごとにプロンプトを表示しません。これは、マージ解決プログラムが
--tool
オプションまたはmerge.tool
設定変数で明示的に指定されている場合のデフォルトです。 --prompt
-
マージ解決プログラムの呼び出しごとにプロンプトを表示し、ユーザーがパスをスキップする機会を与えます。
-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>-
各行に1つのシェルグロブパターンがある <orderfile> で指定された順序でファイルを処理します。これは
diff.orderFile
設定変数を上書きします (git-config[1] を参照)。diff.orderFile
をキャンセルするには-O/dev/null
を使用します。
設定
このセクションのこの行より下のすべての内容は、git-config[1] ドキュメントから選択的に含まれています。内容はそちらで見られるものと同じです。
mergetool.
<tool>.path
-
指定されたツールのパスを上書きします。これは、ツールが
$PATH
にない場合に便利です。 mergetool.
<tool>.cmd
-
指定されたマージツールを呼び出すコマンドを指定します。指定されたコマンドはシェルで評価され、以下の変数が利用可能です。
BASE
はマージされるファイルの共通ベースを含む一時ファイルの名前(利用可能な場合)、LOCAL
は現在のブランチ上のファイルの内容を含む一時ファイルの名前、REMOTE
はマージされるブランチからのファイルの内容を含む一時ファイルの名前、MERGED
はマージツールが成功したマージの結果を書き込むべきファイルの名前です。 mergetool.
<tool>.hideResolved
-
特定のツールに対してグローバルな
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
-
--auto-merge
が指定されている場合、meld は競合しない部分をすべて自動的にマージし、競合する部分をハイライトして、ユーザーの決定を待ちます。mergetool.meld.useAutoMerge
をtrue
に設定すると、Git はmeld
と共に--auto-merge
オプションを無条件に使用するように指示されます。この値をauto
に設定すると、git は--auto-merge
がサポートされているかどうかを検出し、利用可能な場合にのみ--auto-merge
を使用します。false
の値は--auto-merge
の使用を完全に回避し、これがデフォルト値です。 mergetool.
<variant>.layout
-
vimdiff
、nvimdiff
、gvimdiff
のいずれかである vimdiff の <variant> の分割ウィンドウレイアウトを設定します。git
mergetool
を--tool=
<variant> で(または <variant> としてmerge.tool
が設定されている場合は--tool
なしで)起動すると、Git はmergetool.
<variant>.layout
を参照してツールのレイアウトを決定します。バリアント固有の設定が利用できない場合、vimdiff
のものがフォールバックとして使用されます。それも利用できない場合、4つのウィンドウを持つデフォルトのレイアウトが使用されます。レイアウトを設定するには、バックエンド固有のヒント セクションを参照してください。 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
-
マージ解決プログラムの呼び出しごとにプロンプトを表示します。
mergetool.guiDefault
-
merge.guitool
をデフォルトで使用する場合(--gui
引数を指定するのと同等)はtrue
に設定するか、DISPLAY
環境変数の値の有無に応じてmerge.guitool
またはmerge.tool
を選択する場合はauto
に設定します。デフォルトはfalse
で、merge.guitool
を使用するには--gui
引数を明示的に指定する必要があります。
一時ファイル
git
mergetool
は、マージの解決中に *.orig
バックアップファイルを作成します。これらのファイルは、ファイルがマージされ、git
mergetool
セッションが完了すると、安全に削除できます。
mergetool.keepBackup
設定変数を false
に設定すると、ファイルが正常にマージされたときに git
mergetool
がバックアップファイルを自動的に削除します。
バックエンド固有のヒント
vimdiff
説明
git
mergetool
で --tool=vimdiff
を指定すると、Git は次の方法で配置された4つのウィンドウレイアウトで Vim を開きます。
------------------------------------------ | | | | | LOCAL | BASE | REMOTE | | | | | ------------------------------------------ | | | MERGED | | | ------------------------------------------
LOCAL
、BASE
、REMOTE
は、特定のコミット(それぞれ「マージ先のコミット」、「共通の祖先コミット」、「マージ元のコミット」)にある競合するファイルの内容を示す読み取り専用バッファです。
MERGED
は、競合を解決する必要がある書き込み可能バッファです(他の読み取り専用バッファを参照として使用します)。完了したら、通常通り Vim を保存して終了します(:wq
)。中止したい場合は、:cq
を使用して終了します。
レイアウト設定
Vim が使用するウィンドウレイアウトは、設定変数 mergetool.vimdiff.layout
を設定することで変更できます。この変数は、次の区切り文字が特別な意味を持つ文字列を受け入れます。
-
+
は「新しいタブを開く」ために使用されます。 -
,
は「新しい垂直分割を開く」ために使用されます。 -
/
は「新しい水平分割を開く」ために使用されます。 -
@
は、競合解決後の最終バージョンを含むファイルを示すために使用されます。存在しない場合、MERGED
がデフォルトで使用されます。
演算子の優先順位は次のとおりです(括弧を使用して変更できます)。
`@` > `+` > `/` > `,`
動作を理解するためにいくつかの例を見てみましょう。
-
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
が存在しない場合、いずれかのバッファをアットマーク(@
)で「マーク」する必要があります。それが、競合を解決した後に編集して保存する必要があるバッファになります。------------------------------------------ | | | | | | | | | | LOCAL | REMOTE | | | | | | | | | | ------------------------------------------
-
layout
=
"LOCAL,BASE,REMOTE
/
MERGED
+
BASE,LOCAL
+
BASE,REMOTE"
3つのタブが開きます。最初のタブはデフォルトレイアウトのコピーであり、他の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番目のタブの定義で、
,
が/
よりも優先されるように括弧を使用する必要があることに注目してください。
バリアント
--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
]vimdiff
<x> を使用することは、--tool=
[g
|n
]vimdiff
を使用し、設定変数 mergetool.
[g
|n
]vimdiff.layout
を…に設定するのと同じです。
-
<x>
=1
:"@LOCAL,
REMOTE"
-
<x>
=2
:"LOCAL,
MERGED,
REMOTE"
-
<x>
=3
:"MERGED"
例:--tool=gvimdiff2
を使用すると、gvim
が3つの列(LOCAL
、MERGED
、REMOTE
)で開かれます。
GIT
git[1]スイートの一部