Autogenerated manpages for v2.47.0-rc1-33-g90fe38
[git-manpages.git] / man1 / git-mergetool.1
blob6d1a42ec2f88e3e5a1b919e49b7c799d39611785
1 '\" t
2 .\"     Title: git-mergetool
3 .\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
4 .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
5 .\"      Date: 2024-10-04
6 .\"    Manual: Git Manual
7 .\"    Source: Git 2.47.0.rc1.33.g90fe3800b9
8 .\"  Language: English
9 .\"
10 .TH "GIT\-MERGETOOL" "1" "2024-10-04" "Git 2\&.47\&.0\&.rc1\&.33\&.g9" "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 .SH "DESCRIPTION"
38 .sp
39 Use \fBgit mergetool\fR to run one of several merge utilities to resolve merge conflicts\&. It is typically run after \fIgit merge\fR\&.
40 .sp
41 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\&.
42 .SH "OPTIONS"
43 .PP
44 \-t <tool>, \-\-tool=<tool>
45 .RS 4
46 Use the merge resolution program specified by <tool>\&. Valid values include emerge, gvimdiff, kdiff3, meld, vimdiff, and tortoisemerge\&. Run
47 \fBgit mergetool \-\-tool\-help\fR
48 for the list of valid <tool> settings\&.
49 .sp
50 If a merge resolution program is not specified,
51 \fIgit mergetool\fR
52 will use the configuration variable
53 \fBmerge\&.tool\fR\&. If the configuration variable
54 \fBmerge\&.tool\fR
55 is not set,
56 \fIgit mergetool\fR
57 will pick a suitable default\&.
58 .sp
59 You can explicitly provide a full path to the tool by setting the configuration variable
60 \fBmergetool\&.<tool>\&.path\fR\&. For example, you can configure the absolute path to kdiff3 by setting
61 \fBmergetool\&.kdiff3\&.path\fR\&. Otherwise,
62 \fIgit mergetool\fR
63 assumes the tool is available in PATH\&.
64 .sp
65 Instead of running one of the known merge tool programs,
66 \fIgit mergetool\fR
67 can be customized to run an alternative program by specifying the command line to invoke in a configuration variable
68 \fBmergetool\&.<tool>\&.cmd\fR\&.
69 .sp
70 When
71 \fIgit mergetool\fR
72 is invoked with this tool (either through the
73 \fB\-t\fR
75 \fB\-\-tool\fR
76 option or the
77 \fBmerge\&.tool\fR
78 configuration variable), the configured command line will be invoked with
79 \fB$BASE\fR
80 set to the name of a temporary file containing the common base for the merge, if available;
81 \fB$LOCAL\fR
82 set to the name of a temporary file containing the contents of the file on the current branch;
83 \fB$REMOTE\fR
84 set to the name of a temporary file containing the contents of the file to be merged, and
85 \fB$MERGED\fR
86 set to the name of the file to which the merge tool should write the result of the merge resolution\&.
87 .sp
88 If the custom merge tool correctly indicates the success of a merge resolution with its exit code, then the configuration variable
89 \fBmergetool\&.<tool>\&.trustExitCode\fR
90 can be set to
91 \fBtrue\fR\&. Otherwise,
92 \fIgit mergetool\fR
93 will prompt the user to indicate the success of the resolution after the custom tool has exited\&.
94 .RE
95 .PP
96 \-\-tool\-help
97 .RS 4
98 Print a list of merge tools that may be used with
99 \fB\-\-tool\fR\&.
102 \-y, \-\-no\-prompt
103 .RS 4
104 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
105 \fB\-\-tool\fR
106 option or with the
107 \fBmerge\&.tool\fR
108 configuration variable\&.
111 \-\-prompt
112 .RS 4
113 Prompt before each invocation of the merge resolution program to give the user a chance to skip the path\&.
116 \-g, \-\-gui
117 .RS 4
118 When
119 \fIgit\-mergetool\fR
120 is invoked with the
121 \fB\-g\fR
123 \fB\-\-gui\fR
124 option, the default merge tool will be read from the configured
125 \fBmerge\&.guitool\fR
126 variable instead of
127 \fBmerge\&.tool\fR\&. If
128 \fBmerge\&.guitool\fR
129 is not set, we will fallback to the tool configured under
130 \fBmerge\&.tool\fR\&. This may be autoselected using the configuration variable
131 \fBmergetool\&.guiDefault\fR\&.
134 \-\-no\-gui
135 .RS 4
136 This overrides a previous
137 \fB\-g\fR
139 \fB\-\-gui\fR
140 setting or
141 \fBmergetool\&.guiDefault\fR
142 configuration and reads the default merge tool from the configured
143 \fBmerge\&.tool\fR
144 variable\&.
147 \-O<orderfile>
148 .RS 4
149 Process files in the order specified in the <orderfile>, which has one shell glob pattern per line\&. This overrides the
150 \fBdiff\&.orderFile\fR
151 configuration variable (see
152 \fBgit-config\fR(1))\&. To cancel
153 \fBdiff\&.orderFile\fR, use
154 \fB\-O/dev/null\fR\&.
156 .SH "CONFIGURATION"
158 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:
160 mergetool\&.<tool>\&.path
161 .RS 4
162 Override the path for the given tool\&. This is useful in case your tool is not in the PATH\&.
165 mergetool\&.<tool>\&.cmd
166 .RS 4
167 Specify the command to invoke the specified merge tool\&. The specified command is evaluated in shell with the following variables available:
168 \fIBASE\fR
169 is the name of a temporary file containing the common base of the files to be merged, if available;
170 \fILOCAL\fR
171 is the name of a temporary file containing the contents of the file on the current branch;
172 \fIREMOTE\fR
173 is the name of a temporary file containing the contents of the file from the branch being merged;
174 \fIMERGED\fR
175 contains the name of the file to which the merge tool should write the results of a successful merge\&.
178 mergetool\&.<tool>\&.hideResolved
179 .RS 4
180 Allows the user to override the global
181 \fBmergetool\&.hideResolved\fR
182 value for a specific tool\&. See
183 \fBmergetool\&.hideResolved\fR
184 for the full description\&.
187 mergetool\&.<tool>\&.trustExitCode
188 .RS 4
189 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\&.
192 mergetool\&.meld\&.hasOutput
193 .RS 4
194 Older versions of
195 \fBmeld\fR
196 do not support the
197 \fB\-\-output\fR
198 option\&. Git will attempt to detect whether
199 \fBmeld\fR
200 supports
201 \fB\-\-output\fR
202 by inspecting the output of
203 \fBmeld \-\-help\fR\&. Configuring
204 \fBmergetool\&.meld\&.hasOutput\fR
205 will make Git skip these checks and use the configured value instead\&. Setting
206 \fBmergetool\&.meld\&.hasOutput\fR
208 \fBtrue\fR
209 tells Git to unconditionally use the
210 \fB\-\-output\fR
211 option, and
212 \fBfalse\fR
213 avoids using
214 \fB\-\-output\fR\&.
217 mergetool\&.meld\&.useAutoMerge
218 .RS 4
219 When the
220 \fB\-\-auto\-merge\fR
221 is given, meld will merge all non\-conflicting parts automatically, highlight the conflicting parts, and wait for user decision\&. Setting
222 \fBmergetool\&.meld\&.useAutoMerge\fR
224 \fBtrue\fR
225 tells Git to unconditionally use the
226 \fB\-\-auto\-merge\fR
227 option with
228 \fBmeld\fR\&. Setting this value to
229 \fBauto\fR
230 makes git detect whether
231 \fB\-\-auto\-merge\fR
232 is supported and will only use
233 \fB\-\-auto\-merge\fR
234 when available\&. A value of
235 \fBfalse\fR
236 avoids using
237 \fB\-\-auto\-merge\fR
238 altogether, and is the default value\&.
241 mergetool\&.<vimdiff variant>\&.layout
242 .RS 4
243 Configure the split window layout for vimdiff\(cqs
244 \fB<variant>\fR, which is any of
245 \fBvimdiff\fR,
246 \fBnvimdiff\fR,
247 \fBgvimdiff\fR\&. Upon launching
248 \fBgit mergetool\fR
249 with
250 \fB\-\-tool=<variant>\fR
251 (or without
252 \fB\-\-tool\fR
254 \fBmerge\&.tool\fR
255 is configured as
256 \fB<variant>\fR), Git will consult
257 \fBmergetool\&.<variant>\&.layout\fR
258 to determine the tool\(cqs layout\&. If the variant\-specific configuration is not available,
259 \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
260 \fBBACKEND SPECIFIC HINTS\fR
261 section\&.
264 mergetool\&.hideResolved
265 .RS 4
266 During a merge, Git will automatically resolve as many conflicts as possible and write the
267 \fIMERGED\fR
268 file containing conflict markers around any conflicts that it cannot resolve;
269 \fILOCAL\fR
271 \fIREMOTE\fR
272 normally represent the versions of the file from before Git\(cqs conflict resolution\&. This flag causes
273 \fILOCAL\fR
275 \fIREMOTE\fR
276 to be overwritten so that only the unresolved conflicts are presented to the merge tool\&. Can be configured per\-tool via the
277 \fBmergetool\&.<tool>\&.hideResolved\fR
278 configuration variable\&. Defaults to
279 \fBfalse\fR\&.
282 mergetool\&.keepBackup
283 .RS 4
284 After performing a merge, the original file with conflict markers can be saved as a file with a
285 \fB\&.orig\fR
286 extension\&. If this variable is set to
287 \fBfalse\fR
288 then this file is not preserved\&. Defaults to
289 \fBtrue\fR
290 (i\&.e\&. keep the backup files)\&.
293 mergetool\&.keepTemporaries
294 .RS 4
295 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
296 \fBtrue\fR, then these temporary files will be preserved; otherwise, they will be removed after the tool has exited\&. Defaults to
297 \fBfalse\fR\&.
300 mergetool\&.writeToTemp
301 .RS 4
302 Git writes temporary
303 \fIBASE\fR,
304 \fILOCAL\fR, and
305 \fIREMOTE\fR
306 versions of conflicting files in the worktree by default\&. Git will attempt to use a temporary directory for these files when set
307 \fBtrue\fR\&. Defaults to
308 \fBfalse\fR\&.
311 mergetool\&.prompt
312 .RS 4
313 Prompt before each invocation of the merge resolution program\&.
316 mergetool\&.guiDefault
317 .RS 4
319 \fBtrue\fR
320 to use the
321 \fBmerge\&.guitool\fR
322 by default (equivalent to specifying the
323 \fB\-\-gui\fR
324 argument), or
325 \fBauto\fR
326 to select
327 \fBmerge\&.guitool\fR
329 \fBmerge\&.tool\fR
330 depending on the presence of a
331 \fBDISPLAY\fR
332 environment variable value\&. The default is
333 \fBfalse\fR, where the
334 \fB\-\-gui\fR
335 argument must be provided explicitly for the
336 \fBmerge\&.guitool\fR
337 to be used\&.
339 .SH "TEMPORARY FILES"
341 \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\&.
343 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\&.
344 .SH "BACKEND SPECIFIC HINTS"
345 .SS "vimdiff"
347 .it 1 an-trap
348 .nr an-no-space-flag 1
349 .nr an-break-flag 1
351 .ps +1
352 \fBDescription\fR
353 .RS 4
355 When specifying \fB\-\-tool=vimdiff\fR in \fBgit mergetool\fR Git will open Vim with a 4 windows layout distributed in the following way:
357 .if n \{\
358 .RS 4
361 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
362 |             |           |              |
363 |   LOCAL     |   BASE    |   REMOTE     |
364 |             |           |              |
365 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
366 |                                        |
367 |                MERGED                  |
368 |                                        |
369 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
371 .if n \{\
375 \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)
377 \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\&.
380 .it 1 an-trap
381 .nr an-no-space-flag 1
382 .nr an-break-flag 1
384 .ps +1
385 \fBLayout configuration\fR
386 .RS 4
388 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:
390 .RS 4
391 .ie n \{\
392 \h'-04'\(bu\h'+03'\c
394 .el \{\
395 .sp -1
396 .IP \(bu 2.3
398 \fB+\fR
399 is used to "open a new tab"
402 .RS 4
403 .ie n \{\
404 \h'-04'\(bu\h'+03'\c
406 .el \{\
407 .sp -1
408 .IP \(bu 2.3
410 \fB,\fR
411 is used to "open a new vertical split"
414 .RS 4
415 .ie n \{\
416 \h'-04'\(bu\h'+03'\c
418 .el \{\
419 .sp -1
420 .IP \(bu 2.3
422 \fB/\fR
423 is used to "open a new horizontal split"
426 .RS 4
427 .ie n \{\
428 \h'-04'\(bu\h'+03'\c
430 .el \{\
431 .sp -1
432 .IP \(bu 2.3
434 \fB@\fR
435 is used to indicate the file containing the final version after solving the conflicts\&. If not present,
436 \fBMERGED\fR
437 will be used by default\&.
440 The precedence of the operators is as follows (you can use parentheses to change it):
442 .if n \{\
443 .RS 4
446 `@` > `+` > `/` > `,`
448 .if n \{\
452 Let\(cqs see some examples to understand how it works:
454 .RS 4
455 .ie n \{\
456 \h'-04'\(bu\h'+03'\c
458 .el \{\
459 .sp -1
460 .IP \(bu 2.3
462 \fBlayout = "(LOCAL,BASE,REMOTE)/MERGED"\fR
464 This is exactly the same as the default layout we have already seen\&.
466 Note that
467 \fB/\fR
468 has precedence over
469 \fB,\fR
470 and thus the parenthesis are not needed in this case\&. The next layout definition is equivalent:
472 .if n \{\
473 .RS 4
476 layout = "LOCAL,BASE,REMOTE / MERGED"
478 .if n \{\
483 .RS 4
484 .ie n \{\
485 \h'-04'\(bu\h'+03'\c
487 .el \{\
488 .sp -1
489 .IP \(bu 2.3
491 \fBlayout = "LOCAL,MERGED,REMOTE"\fR
493 If, for some reason, we are not interested in the
494 \fBBASE\fR
495 buffer\&.
497 .if n \{\
498 .RS 4
501 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
502 |             |           |              |
503 |             |           |              |
504 |   LOCAL     |   MERGED  |   REMOTE     |
505 |             |           |              |
506 |             |           |              |
507 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
509 .if n \{\
514 .RS 4
515 .ie n \{\
516 \h'-04'\(bu\h'+03'\c
518 .el \{\
519 .sp -1
520 .IP \(bu 2.3
522 \fBlayout = "MERGED"\fR
524 Only the
525 \fBMERGED\fR
526 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\&.
528 .if n \{\
529 .RS 4
532 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
533 |                                        |
534 |                                        |
535 |                 MERGED                 |
536 |                                        |
537 |                                        |
538 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
540 .if n \{\
545 .RS 4
546 .ie n \{\
547 \h'-04'\(bu\h'+03'\c
549 .el \{\
550 .sp -1
551 .IP \(bu 2.3
553 \fBlayout = "@LOCAL,REMOTE"\fR
555 When
556 \fBMERGED\fR
557 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\&.
559 .if n \{\
560 .RS 4
563 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
564 |                   |                    |
565 |                   |                    |
566 |                   |                    |
567 |     LOCAL         |    REMOTE          |
568 |                   |                    |
569 |                   |                    |
570 |                   |                    |
571 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
573 .if n \{\
578 .RS 4
579 .ie n \{\
580 \h'-04'\(bu\h'+03'\c
582 .el \{\
583 .sp -1
584 .IP \(bu 2.3
586 \fBlayout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE"\fR
588 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
590 \fBLOCAL\fR) and (\fBBASE\fR
592 \fBREMOTE\fR) respectively\&.
594 .if n \{\
595 .RS 4
598 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
599 | <TAB #1> |  TAB #2  |  TAB #3  |       |
600 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
601 |             |           |              |
602 |   LOCAL     |   BASE    |   REMOTE     |
603 |             |           |              |
604 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
605 |                                        |
606 |                MERGED                  |
607 |                                        |
608 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
610 .if n \{\
614 .if n \{\
615 .RS 4
618 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
619 |  TAB #1  | <TAB #2> |  TAB #3  |       |
620 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
621 |                   |                    |
622 |                   |                    |
623 |                   |                    |
624 |     BASE          |    LOCAL           |
625 |                   |                    |
626 |                   |                    |
627 |                   |                    |
628 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
630 .if n \{\
634 .if n \{\
635 .RS 4
638 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
639 |  TAB #1  |  TAB #2  | <TAB #3> |       |
640 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
641 |                   |                    |
642 |                   |                    |
643 |                   |                    |
644 |     BASE          |    REMOTE          |
645 |                   |                    |
646 |                   |                    |
647 |                   |                    |
648 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
650 .if n \{\
655 .RS 4
656 .ie n \{\
657 \h'-04'\(bu\h'+03'\c
659 .el \{\
660 .sp -1
661 .IP \(bu 2.3
663 \fBlayout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL/BASE/REMOTE),MERGED"\fR
665 Same as the previous example, but adds a fourth tab with the same information as the first tab, with a different layout\&.
667 .if n \{\
668 .RS 4
671 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
672 |  TAB #1  |  TAB #2  |  TAB #3  | <TAB #4> |
673 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
674 |       LOCAL         |                     |
675 |\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-|                     |
676 |       BASE          |        MERGED       |
677 |\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-|                     |
678 |       REMOTE        |                     |
679 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
681 .if n \{\
685 Note how in the third tab definition we need to use parentheses to make
686 \fB,\fR
687 have precedence over
688 \fB/\fR\&.
692 .it 1 an-trap
693 .nr an-no-space-flag 1
694 .nr an-break-flag 1
696 .ps +1
697 \fBVariants\fR
698 .RS 4
700 Instead of \fB\-\-tool=vimdiff\fR, you can also use one of these other variants:
702 .RS 4
703 .ie n \{\
704 \h'-04'\(bu\h'+03'\c
706 .el \{\
707 .sp -1
708 .IP \(bu 2.3
710 \fB\-\-tool=gvimdiff\fR, to open gVim instead of Vim\&.
713 .RS 4
714 .ie n \{\
715 \h'-04'\(bu\h'+03'\c
717 .el \{\
718 .sp -1
719 .IP \(bu 2.3
721 \fB\-\-tool=nvimdiff\fR, to open Neovim instead of Vim\&.
724 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)\&.
726 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\&...\:
728 .RS 4
729 .ie n \{\
730 \h'-04'\(bu\h'+03'\c
732 .el \{\
733 .sp -1
734 .IP \(bu 2.3
736 \fBx=1\fR:
737 \fB"@LOCAL, REMOTE"\fR
740 .RS 4
741 .ie n \{\
742 \h'-04'\(bu\h'+03'\c
744 .el \{\
745 .sp -1
746 .IP \(bu 2.3
748 \fBx=2\fR:
749 \fB"LOCAL, MERGED, REMOTE"\fR
752 .RS 4
753 .ie n \{\
754 \h'-04'\(bu\h'+03'\c
756 .el \{\
757 .sp -1
758 .IP \(bu 2.3
760 \fBx=3\fR:
761 \fB"MERGED"\fR
764 Example: using \fB\-\-tool=gvimdiff2\fR will open \fBgvim\fR with three columns (LOCAL, MERGED and REMOTE)\&.
766 .SH "GIT"
768 Part of the \fBgit\fR(1) suite