Autogenerated manpages for v2.45.0-31-gd4cc1
[git-manpages.git] / man1 / git-mergetool.1
blobb49af206aa4addc8b61d863e381a6a7ddde83122
1 '\" t
2 .\"     Title: git-mergetool
3 .\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
4 .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
5 .\"      Date: 2024-04-30
6 .\"    Manual: Git Manual
7 .\"    Source: Git 2.45.0.31.gd4cc1ec35f
8 .\"  Language: English
9 .\"
10 .TH "GIT\-MERGETOOL" "1" "2024\-04\-30" "Git 2\&.45\&.0\&.31\&.gd4cc1ec" "Git Manual"
11 .\" -----------------------------------------------------------------
12 .\" * Define some portability stuff
13 .\" -----------------------------------------------------------------
14 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15 .\" http://bugs.debian.org/507673
16 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
17 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18 .ie \n(.g .ds Aq \(aq
19 .el       .ds Aq '
20 .\" -----------------------------------------------------------------
21 .\" * set default formatting
22 .\" -----------------------------------------------------------------
23 .\" disable hyphenation
24 .nh
25 .\" disable justification (adjust text to left margin only)
26 .ad l
27 .\" -----------------------------------------------------------------
28 .\" * MAIN CONTENT STARTS HERE *
29 .\" -----------------------------------------------------------------
30 .SH "NAME"
31 git-mergetool \- Run merge conflict resolution tools to resolve merge conflicts
32 .SH "SYNOPSIS"
33 .sp
34 .nf
35 \fIgit mergetool\fR [\-\-tool=<tool>] [\-y | \-\-[no\-]prompt] [<file>\&...]
36 .fi
37 .sp
38 .SH "DESCRIPTION"
39 .sp
40 Use \fBgit mergetool\fR to run one of several merge utilities to resolve merge conflicts\&. It is typically run after \fIgit merge\fR\&.
41 .sp
42 If one or more <file> parameters are given, the merge tool program will be run to resolve differences in each file (skipping those without conflicts)\&. Specifying a directory will include all unresolved files in that path\&. If no <file> names are specified, \fIgit mergetool\fR will run the merge tool program on every file with merge conflicts\&.
43 .SH "OPTIONS"
44 .PP
45 \-t <tool>, \-\-tool=<tool>
46 .RS 4
47 Use the merge resolution program specified by <tool>\&. Valid values include emerge, gvimdiff, kdiff3, meld, vimdiff, and tortoisemerge\&. Run
48 \fBgit mergetool \-\-tool\-help\fR
49 for the list of valid <tool> settings\&.
50 .sp
51 If a merge resolution program is not specified,
52 \fIgit mergetool\fR
53 will use the configuration variable
54 \fBmerge\&.tool\fR\&. If the configuration variable
55 \fBmerge\&.tool\fR
56 is not set,
57 \fIgit mergetool\fR
58 will pick a suitable default\&.
59 .sp
60 You can explicitly provide a full path to the tool by setting the configuration variable
61 \fBmergetool\&.<tool>\&.path\fR\&. For example, you can configure the absolute path to kdiff3 by setting
62 \fBmergetool\&.kdiff3\&.path\fR\&. Otherwise,
63 \fIgit mergetool\fR
64 assumes the tool is available in PATH\&.
65 .sp
66 Instead of running one of the known merge tool programs,
67 \fIgit mergetool\fR
68 can be customized to run an alternative program by specifying the command line to invoke in a configuration variable
69 \fBmergetool\&.<tool>\&.cmd\fR\&.
70 .sp
71 When
72 \fIgit mergetool\fR
73 is invoked with this tool (either through the
74 \fB\-t\fR
76 \fB\-\-tool\fR
77 option or the
78 \fBmerge\&.tool\fR
79 configuration variable), the configured command line will be invoked with
80 \fB$BASE\fR
81 set to the name of a temporary file containing the common base for the merge, if available;
82 \fB$LOCAL\fR
83 set to the name of a temporary file containing the contents of the file on the current branch;
84 \fB$REMOTE\fR
85 set to the name of a temporary file containing the contents of the file to be merged, and
86 \fB$MERGED\fR
87 set to the name of the file to which the merge tool should write the result of the merge resolution\&.
88 .sp
89 If the custom merge tool correctly indicates the success of a merge resolution with its exit code, then the configuration variable
90 \fBmergetool\&.<tool>\&.trustExitCode\fR
91 can be set to
92 \fBtrue\fR\&. Otherwise,
93 \fIgit mergetool\fR
94 will prompt the user to indicate the success of the resolution after the custom tool has exited\&.
95 .RE
96 .PP
97 \-\-tool\-help
98 .RS 4
99 Print a list of merge tools that may be used with
100 \fB\-\-tool\fR\&.
103 \-y, \-\-no\-prompt
104 .RS 4
105 Don\(cqt prompt before each invocation of the merge resolution program\&. This is the default if the merge resolution program is explicitly specified with the
106 \fB\-\-tool\fR
107 option or with the
108 \fBmerge\&.tool\fR
109 configuration variable\&.
112 \-\-prompt
113 .RS 4
114 Prompt before each invocation of the merge resolution program to give the user a chance to skip the path\&.
117 \-g, \-\-gui
118 .RS 4
119 When
120 \fIgit\-mergetool\fR
121 is invoked with the
122 \fB\-g\fR
124 \fB\-\-gui\fR
125 option, the default merge tool will be read from the configured
126 \fBmerge\&.guitool\fR
127 variable instead of
128 \fBmerge\&.tool\fR\&. If
129 \fBmerge\&.guitool\fR
130 is not set, we will fallback to the tool configured under
131 \fBmerge\&.tool\fR\&. This may be autoselected using the configuration variable
132 \fBmergetool\&.guiDefault\fR\&.
135 \-\-no\-gui
136 .RS 4
137 This overrides a previous
138 \fB\-g\fR
140 \fB\-\-gui\fR
141 setting or
142 \fBmergetool\&.guiDefault\fR
143 configuration and reads the default merge tool from the configured
144 \fBmerge\&.tool\fR
145 variable\&.
148 \-O<orderfile>
149 .RS 4
150 Process files in the order specified in the <orderfile>, which has one shell glob pattern per line\&. This overrides the
151 \fBdiff\&.orderFile\fR
152 configuration variable (see
153 \fBgit-config\fR(1))\&. To cancel
154 \fBdiff\&.orderFile\fR, use
155 \fB\-O/dev/null\fR\&.
157 .SH "CONFIGURATION"
159 Everything below this line in this section is selectively included from the \fBgit-config\fR(1) documentation\&. The content is the same as what\(cqs found there:
161 mergetool\&.<tool>\&.path
162 .RS 4
163 Override the path for the given tool\&. This is useful in case your tool is not in the PATH\&.
166 mergetool\&.<tool>\&.cmd
167 .RS 4
168 Specify the command to invoke the specified merge tool\&. The specified command is evaluated in shell with the following variables available:
169 \fIBASE\fR
170 is the name of a temporary file containing the common base of the files to be merged, if available;
171 \fILOCAL\fR
172 is the name of a temporary file containing the contents of the file on the current branch;
173 \fIREMOTE\fR
174 is the name of a temporary file containing the contents of the file from the branch being merged;
175 \fIMERGED\fR
176 contains the name of the file to which the merge tool should write the results of a successful merge\&.
179 mergetool\&.<tool>\&.hideResolved
180 .RS 4
181 Allows the user to override the global
182 \fBmergetool\&.hideResolved\fR
183 value for a specific tool\&. See
184 \fBmergetool\&.hideResolved\fR
185 for the full description\&.
188 mergetool\&.<tool>\&.trustExitCode
189 .RS 4
190 For a custom merge command, specify whether the exit code of the merge command can be used to determine whether the merge was successful\&. If this is not set to true then the merge target file timestamp is checked, and the merge is assumed to have been successful if the file has been updated; otherwise, the user is prompted to indicate the success of the merge\&.
193 mergetool\&.meld\&.hasOutput
194 .RS 4
195 Older versions of
196 \fBmeld\fR
197 do not support the
198 \fB\-\-output\fR
199 option\&. Git will attempt to detect whether
200 \fBmeld\fR
201 supports
202 \fB\-\-output\fR
203 by inspecting the output of
204 \fBmeld \-\-help\fR\&. Configuring
205 \fBmergetool\&.meld\&.hasOutput\fR
206 will make Git skip these checks and use the configured value instead\&. Setting
207 \fBmergetool\&.meld\&.hasOutput\fR
209 \fBtrue\fR
210 tells Git to unconditionally use the
211 \fB\-\-output\fR
212 option, and
213 \fBfalse\fR
214 avoids using
215 \fB\-\-output\fR\&.
218 mergetool\&.meld\&.useAutoMerge
219 .RS 4
220 When the
221 \fB\-\-auto\-merge\fR
222 is given, meld will merge all non\-conflicting parts automatically, highlight the conflicting parts, and wait for user decision\&. Setting
223 \fBmergetool\&.meld\&.useAutoMerge\fR
225 \fBtrue\fR
226 tells Git to unconditionally use the
227 \fB\-\-auto\-merge\fR
228 option with
229 \fBmeld\fR\&. Setting this value to
230 \fBauto\fR
231 makes git detect whether
232 \fB\-\-auto\-merge\fR
233 is supported and will only use
234 \fB\-\-auto\-merge\fR
235 when available\&. A value of
236 \fBfalse\fR
237 avoids using
238 \fB\-\-auto\-merge\fR
239 altogether, and is the default value\&.
242 mergetool\&.<vimdiff variant>\&.layout
243 .RS 4
244 Configure the split window layout for vimdiff\(cqs
245 \fB<variant>\fR, which is any of
246 \fBvimdiff\fR,
247 \fBnvimdiff\fR,
248 \fBgvimdiff\fR\&. Upon launching
249 \fBgit mergetool\fR
250 with
251 \fB\-\-tool=<variant>\fR
252 (or without
253 \fB\-\-tool\fR
255 \fBmerge\&.tool\fR
256 is configured as
257 \fB<variant>\fR), Git will consult
258 \fBmergetool\&.<variant>\&.layout\fR
259 to determine the tool\(cqs layout\&. If the variant\-specific configuration is not available,
260 \fBvimdiff\fR\*(Aqs is used as fallback\&. If that too is not available, a default layout with 4 windows will be used\&. To configure the layout, see the
261 \fBBACKEND SPECIFIC HINTS\fR
262 section\&.
265 mergetool\&.hideResolved
266 .RS 4
267 During a merge, Git will automatically resolve as many conflicts as possible and write the
268 \fIMERGED\fR
269 file containing conflict markers around any conflicts that it cannot resolve;
270 \fILOCAL\fR
272 \fIREMOTE\fR
273 normally represent the versions of the file from before Git\(cqs conflict resolution\&. This flag causes
274 \fILOCAL\fR
276 \fIREMOTE\fR
277 to be overwritten so that only the unresolved conflicts are presented to the merge tool\&. Can be configured per\-tool via the
278 \fBmergetool\&.<tool>\&.hideResolved\fR
279 configuration variable\&. Defaults to
280 \fBfalse\fR\&.
283 mergetool\&.keepBackup
284 .RS 4
285 After performing a merge, the original file with conflict markers can be saved as a file with a
286 \fB\&.orig\fR
287 extension\&. If this variable is set to
288 \fBfalse\fR
289 then this file is not preserved\&. Defaults to
290 \fBtrue\fR
291 (i\&.e\&. keep the backup files)\&.
294 mergetool\&.keepTemporaries
295 .RS 4
296 When invoking a custom merge tool, Git uses a set of temporary files to pass to the tool\&. If the tool returns an error and this variable is set to
297 \fBtrue\fR, then these temporary files will be preserved; otherwise, they will be removed after the tool has exited\&. Defaults to
298 \fBfalse\fR\&.
301 mergetool\&.writeToTemp
302 .RS 4
303 Git writes temporary
304 \fIBASE\fR,
305 \fILOCAL\fR, and
306 \fIREMOTE\fR
307 versions of conflicting files in the worktree by default\&. Git will attempt to use a temporary directory for these files when set
308 \fBtrue\fR\&. Defaults to
309 \fBfalse\fR\&.
312 mergetool\&.prompt
313 .RS 4
314 Prompt before each invocation of the merge resolution program\&.
317 mergetool\&.guiDefault
318 .RS 4
320 \fBtrue\fR
321 to use the
322 \fBmerge\&.guitool\fR
323 by default (equivalent to specifying the
324 \fB\-\-gui\fR
325 argument), or
326 \fBauto\fR
327 to select
328 \fBmerge\&.guitool\fR
330 \fBmerge\&.tool\fR
331 depending on the presence of a
332 \fBDISPLAY\fR
333 environment variable value\&. The default is
334 \fBfalse\fR, where the
335 \fB\-\-gui\fR
336 argument must be provided explicitly for the
337 \fBmerge\&.guitool\fR
338 to be used\&.
340 .SH "TEMPORARY FILES"
342 \fBgit mergetool\fR creates \fB*\&.orig\fR backup files while resolving merges\&. These are safe to remove once a file has been merged and its \fBgit mergetool\fR session has completed\&.
344 Setting the \fBmergetool\&.keepBackup\fR configuration variable to \fBfalse\fR causes \fBgit mergetool\fR to automatically remove the backup files as files are successfully merged\&.
345 .SH "BACKEND SPECIFIC HINTS"
346 .SS "vimdiff"
348 .it 1 an-trap
349 .nr an-no-space-flag 1
350 .nr an-break-flag 1
352 .ps +1
353 \fBDescription\fR
354 .RS 4
356 When specifying \fB\-\-tool=vimdiff\fR in \fBgit mergetool\fR Git will open Vim with a 4 windows layout distributed in the following way:
358 .if n \{\
359 .RS 4
362 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
363 |             |           |              |
364 |   LOCAL     |   BASE    |   REMOTE     |
365 |             |           |              |
366 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
367 |                                        |
368 |                MERGED                  |
369 |                                        |
370 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
372 .if n \{\
376 \fBLOCAL\fR, \fBBASE\fR and \fBREMOTE\fR are read\-only buffers showing the contents of the conflicting file in specific commits ("commit you are merging into", "common ancestor commit" and "commit you are merging from" respectively)
378 \fBMERGED\fR is a writable buffer where you have to resolve the conflicts (using the other read\-only buffers as a reference)\&. Once you are done, save and exit Vim as usual (\fB:wq\fR) or, if you want to abort, exit using \fB:cq\fR\&.
381 .it 1 an-trap
382 .nr an-no-space-flag 1
383 .nr an-break-flag 1
385 .ps +1
386 \fBLayout configuration\fR
387 .RS 4
389 You can change the windows layout used by Vim by setting configuration variable \fBmergetool\&.vimdiff\&.layout\fR which accepts a string where the following separators have special meaning:
391 .RS 4
392 .ie n \{\
393 \h'-04'\(bu\h'+03'\c
395 .el \{\
396 .sp -1
397 .IP \(bu 2.3
399 \fB+\fR
400 is used to "open a new tab"
403 .RS 4
404 .ie n \{\
405 \h'-04'\(bu\h'+03'\c
407 .el \{\
408 .sp -1
409 .IP \(bu 2.3
411 \fB,\fR
412 is used to "open a new vertical split"
415 .RS 4
416 .ie n \{\
417 \h'-04'\(bu\h'+03'\c
419 .el \{\
420 .sp -1
421 .IP \(bu 2.3
423 \fB/\fR
424 is used to "open a new horizontal split"
427 .RS 4
428 .ie n \{\
429 \h'-04'\(bu\h'+03'\c
431 .el \{\
432 .sp -1
433 .IP \(bu 2.3
435 \fB@\fR
436 is used to indicate the file containing the final version after solving the conflicts\&. If not present,
437 \fBMERGED\fR
438 will be used by default\&.
441 The precedence of the operators is as follows (you can use parentheses to change it):
443 .if n \{\
444 .RS 4
447 `@` > `+` > `/` > `,`
449 .if n \{\
453 Let\(cqs see some examples to understand how it works:
455 .RS 4
456 .ie n \{\
457 \h'-04'\(bu\h'+03'\c
459 .el \{\
460 .sp -1
461 .IP \(bu 2.3
463 \fBlayout = "(LOCAL,BASE,REMOTE)/MERGED"\fR
465 This is exactly the same as the default layout we have already seen\&.
467 Note that
468 \fB/\fR
469 has precedence over
470 \fB,\fR
471 and thus the parenthesis are not needed in this case\&. The next layout definition is equivalent:
473 .if n \{\
474 .RS 4
477 layout = "LOCAL,BASE,REMOTE / MERGED"
479 .if n \{\
484 .RS 4
485 .ie n \{\
486 \h'-04'\(bu\h'+03'\c
488 .el \{\
489 .sp -1
490 .IP \(bu 2.3
492 \fBlayout = "LOCAL,MERGED,REMOTE"\fR
494 If, for some reason, we are not interested in the
495 \fBBASE\fR
496 buffer\&.
498 .if n \{\
499 .RS 4
502 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
503 |             |           |              |
504 |             |           |              |
505 |   LOCAL     |   MERGED  |   REMOTE     |
506 |             |           |              |
507 |             |           |              |
508 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
510 .if n \{\
515 .RS 4
516 .ie n \{\
517 \h'-04'\(bu\h'+03'\c
519 .el \{\
520 .sp -1
521 .IP \(bu 2.3
523 \fBlayout = "MERGED"\fR
525 Only the
526 \fBMERGED\fR
527 buffer will be shown\&. Note, however, that all the other ones are still loaded in vim, and you can access them with the "buffers" command\&.
529 .if n \{\
530 .RS 4
533 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
534 |                                        |
535 |                                        |
536 |                 MERGED                 |
537 |                                        |
538 |                                        |
539 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
541 .if n \{\
546 .RS 4
547 .ie n \{\
548 \h'-04'\(bu\h'+03'\c
550 .el \{\
551 .sp -1
552 .IP \(bu 2.3
554 \fBlayout = "@LOCAL,REMOTE"\fR
556 When
557 \fBMERGED\fR
558 is not present in the layout, you must "mark" one of the buffers with an asterisk\&. That will become the buffer you need to edit and save after resolving the conflicts\&.
560 .if n \{\
561 .RS 4
564 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
565 |                   |                    |
566 |                   |                    |
567 |                   |                    |
568 |     LOCAL         |    REMOTE          |
569 |                   |                    |
570 |                   |                    |
571 |                   |                    |
572 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
574 .if n \{\
579 .RS 4
580 .ie n \{\
581 \h'-04'\(bu\h'+03'\c
583 .el \{\
584 .sp -1
585 .IP \(bu 2.3
587 \fBlayout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE"\fR
589 Three tabs will open: the first one is a copy of the default layout, while the other two only show the differences between (\fBBASE\fR
591 \fBLOCAL\fR) and (\fBBASE\fR
593 \fBREMOTE\fR) respectively\&.
595 .if n \{\
596 .RS 4
599 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
600 | <TAB #1> |  TAB #2  |  TAB #3  |       |
601 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
602 |             |           |              |
603 |   LOCAL     |   BASE    |   REMOTE     |
604 |             |           |              |
605 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
606 |                                        |
607 |                MERGED                  |
608 |                                        |
609 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
611 .if n \{\
615 .if n \{\
616 .RS 4
619 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
620 |  TAB #1  | <TAB #2> |  TAB #3  |       |
621 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
622 |                   |                    |
623 |                   |                    |
624 |                   |                    |
625 |     BASE          |    LOCAL           |
626 |                   |                    |
627 |                   |                    |
628 |                   |                    |
629 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
631 .if n \{\
635 .if n \{\
636 .RS 4
639 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
640 |  TAB #1  |  TAB #2  | <TAB #3> |       |
641 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
642 |                   |                    |
643 |                   |                    |
644 |                   |                    |
645 |     BASE          |    REMOTE          |
646 |                   |                    |
647 |                   |                    |
648 |                   |                    |
649 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
651 .if n \{\
656 .RS 4
657 .ie n \{\
658 \h'-04'\(bu\h'+03'\c
660 .el \{\
661 .sp -1
662 .IP \(bu 2.3
664 \fBlayout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL/BASE/REMOTE),MERGED"\fR
666 Same as the previous example, but adds a fourth tab with the same information as the first tab, with a different layout\&.
668 .if n \{\
669 .RS 4
672 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
673 |  TAB #1  |  TAB #2  |  TAB #3  | <TAB #4> |
674 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
675 |       LOCAL         |                     |
676 |\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-|                     |
677 |       BASE          |        MERGED       |
678 |\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-|                     |
679 |       REMOTE        |                     |
680 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
682 .if n \{\
686 Note how in the third tab definition we need to use parentheses to make
687 \fB,\fR
688 have precedence over
689 \fB/\fR\&.
693 .it 1 an-trap
694 .nr an-no-space-flag 1
695 .nr an-break-flag 1
697 .ps +1
698 \fBVariants\fR
699 .RS 4
701 Instead of \fB\-\-tool=vimdiff\fR, you can also use one of these other variants:
703 .RS 4
704 .ie n \{\
705 \h'-04'\(bu\h'+03'\c
707 .el \{\
708 .sp -1
709 .IP \(bu 2.3
711 \fB\-\-tool=gvimdiff\fR, to open gVim instead of Vim\&.
714 .RS 4
715 .ie n \{\
716 \h'-04'\(bu\h'+03'\c
718 .el \{\
719 .sp -1
720 .IP \(bu 2.3
722 \fB\-\-tool=nvimdiff\fR, to open Neovim instead of Vim\&.
725 When using these variants, in order to specify a custom layout you will have to set configuration variables \fBmergetool\&.gvimdiff\&.layout\fR and \fBmergetool\&.nvimdiff\&.layout\fR instead of \fBmergetool\&.vimdiff\&.layout\fR (though the latter will be used as fallback if the variant\-specific one is not set)\&.
727 In addition, for backwards compatibility with previous Git versions, you can also append \fB1\fR, \fB2\fR or \fB3\fR to either \fBvimdiff\fR or any of the variants (ex: \fBvimdiff3\fR, \fBnvimdiff1\fR, etc\&...) to use a predefined layout\&. In other words, using \fB\-\-tool=[g,n,]vimdiffx\fR is the same as using \fB\-\-tool=[g,n,]vimdiff\fR and setting configuration variable \fBmergetool\&.[g,n,]vimdiff\&.layout\fR to\&...
729 .RS 4
730 .ie n \{\
731 \h'-04'\(bu\h'+03'\c
733 .el \{\
734 .sp -1
735 .IP \(bu 2.3
737 \fBx=1\fR:
738 \fB"@LOCAL, REMOTE"\fR
741 .RS 4
742 .ie n \{\
743 \h'-04'\(bu\h'+03'\c
745 .el \{\
746 .sp -1
747 .IP \(bu 2.3
749 \fBx=2\fR:
750 \fB"LOCAL, MERGED, REMOTE"\fR
753 .RS 4
754 .ie n \{\
755 \h'-04'\(bu\h'+03'\c
757 .el \{\
758 .sp -1
759 .IP \(bu 2.3
761 \fBx=3\fR:
762 \fB"MERGED"\fR
765 Example: using \fB\-\-tool=gvimdiff2\fR will open \fBgvim\fR with three columns (LOCAL, MERGED and REMOTE)\&.
767 .SH "GIT"
769 Part of the \fBgit\fR(1) suite