セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.45.1 → 2.49.0 変更なし
-
2.45.0
2024-04-29
- 2.43.1 → 2.44.3 変更なし
-
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 で利用可能であると仮定します。既知のマージツールプログラムのいずれかを実行する代わりに、
mergetool.<tool>.cmd
という設定変数で呼び出すコマンドラインを指定することで、git mergetool を別のプログラムを実行するようにカスタマイズできます。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>
-
<orderfile> で指定された順序でファイルを処理します。<orderfile> は1行につき1つのシェルグロブパターンを含みます。これは
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.<vimdiff variant>.layout
-
vimdiff の
<variant>
(vimdiff
,nvimdiff
,gvimdiff
のいずれか) の分割ウィンドウレイアウトを設定します。--tool=<variant>
(またはmerge.tool
が<variant>
に設定されている場合は--tool
なし) でgit mergetool
を起動すると、Git はツールのレイアウトを決定するためにmergetool.<variant>.layout
を参照します。バリアント固有の設定が利用できない場合は、vimdiff
の設定がフォールバックとして使用されます。それも利用できない場合は、4つのウィンドウを持つデフォルトのレイアウトが使用されます。レイアウトを設定するには、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
-
マージ解決プログラムの各呼び出し前にプロンプトを表示します。
- mergetool.guiDefault
-
デフォルトで
merge.guitool
を使用するようにtrue
に設定するか (--gui
引数を指定するのと同等)、または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
が存在しない場合は、バッファの1つをアスタリスクで「マーク」する必要があります。それが、競合解決後に編集して保存する必要があるバッファになります。------------------------------------------ | | | | | | | | | | 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,]vimdiffx
の使用は、--tool=[g,n,]vimdiff
を使用し、設定変数 mergetool.[g,n,]vimdiff.layout
を以下のように設定するのと同じです。
-
x=1
:"@LOCAL, REMOTE"
-
x=2
:"LOCAL, MERGED, REMOTE"
-
x=3
:"MERGED"
例: --tool=gvimdiff2
を使用すると、3列 (LOCAL, MERGED, REMOTE) の gvim が開きます。
GIT
git[1] スイートの一部