1 <?xml version=
"1.0" encoding=
"UTF-8"?>
2 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.1//EN"
3 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4 <html xmlns=
"http://www.w3.org/1999/xhtml" xml:
lang=
"en">
6 <meta http-equiv=
"Content-Type" content=
"application/xhtml+xml; charset=UTF-8" />
7 <meta name=
"generator" content=
"AsciiDoc 10.2.0" />
8 <title>git-mergetool(
1)
</title>
9 <style type=
"text/css">
10 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
14 font-family: Georgia,serif;
18 h1, h2, h3, h4, h5, h6,
19 div.title, caption.title,
20 thead, p.table.header,
22 #author, #revnumber, #revdate, #revremark,
24 font-family: Arial,Helvetica,sans-serif;
28 margin:
1em
5%
1em
5%;
33 text-decoration: underline;
49 h1, h2, h3, h4, h5, h6 {
57 border-bottom:
2px solid silver;
77 border:
1px solid silver;
88 ul
> li { color: #aaa; }
89 ul
> li
> * { color: black; }
91 .monospaced, code, pre {
92 font-family:
"Courier New", Courier, monospace;
99 white-space: pre-wrap;
109 #revnumber, #revdate, #revremark {
114 border-top:
2px solid silver;
120 padding-bottom:
0.5em;
124 padding-bottom:
0.5em;
129 margin-bottom:
1.5em;
131 div.imageblock, div.exampleblock, div.verseblock,
132 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
133 div.admonitionblock {
135 margin-bottom:
1.5em;
137 div.admonitionblock {
139 margin-bottom:
2.0em;
144 div.content { /* Block element content. */
148 /* Block element titles. */
149 div.title, caption.title {
154 margin-bottom:
0.5em;
160 td div.title:first-child {
163 div.content div.title:first-child {
166 div.content + div.title {
170 div.sidebarblock
> div.content {
172 border:
1px solid #dddddd;
173 border-left:
4px solid #f0f0f0;
177 div.listingblock
> div.content {
178 border:
1px solid #dddddd;
179 border-left:
5px solid #f0f0f0;
184 div.quoteblock, div.verseblock {
188 border-left:
5px solid #f0f0f0;
192 div.quoteblock
> div.attribution {
197 div.verseblock
> pre.content {
198 font-family: inherit;
201 div.verseblock
> div.attribution {
205 /* DEPRECATED: Pre version
8.2.7 verse style literal block. */
206 div.verseblock + div.attribution {
210 div.admonitionblock .icon {
214 text-decoration: underline;
216 padding-right:
0.5em;
218 div.admonitionblock td.content {
220 border-left:
3px solid #dddddd;
223 div.exampleblock
> div.content {
224 border-left:
3px solid #dddddd;
228 div.imageblock div.content { padding-left:
0; }
229 span.image img { border-style: none; vertical-align: text-bottom; }
230 a.image:visited { color: white; }
234 margin-bottom:
0.8em;
247 list-style-position: outside;
250 list-style-type: decimal;
253 list-style-type: lower-alpha;
256 list-style-type: upper-alpha;
259 list-style-type: lower-roman;
262 list-style-type: upper-roman;
265 div.compact ul, div.compact ol,
266 div.compact p, div.compact p,
267 div.compact div, div.compact div {
269 margin-bottom:
0.1em;
281 margin-bottom:
0.8em;
284 padding-bottom:
15px;
286 dt.hdlist1.strong, td.hdlist1.strong {
292 padding-right:
0.8em;
298 div.hdlist.compact tr {
307 .footnote, .footnoteref {
311 span.footnote, span.footnoteref {
312 vertical-align: super;
316 margin:
20px
0 20px
0;
320 #footnotes div.footnote {
326 border-top:
1px solid silver;
335 padding-right:
0.5em;
336 padding-bottom:
0.3em;
344 #footer-badges { display: none; }
348 margin-bottom:
2.5em;
356 margin-bottom:
0.1em;
359 div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
376 span.aqua { color: aqua; }
377 span.black { color: black; }
378 span.blue { color: blue; }
379 span.fuchsia { color: fuchsia; }
380 span.gray { color: gray; }
381 span.green { color: green; }
382 span.lime { color: lime; }
383 span.maroon { color: maroon; }
384 span.navy { color: navy; }
385 span.olive { color: olive; }
386 span.purple { color: purple; }
387 span.red { color: red; }
388 span.silver { color: silver; }
389 span.teal { color: teal; }
390 span.white { color: white; }
391 span.yellow { color: yellow; }
393 span.aqua-background { background: aqua; }
394 span.black-background { background: black; }
395 span.blue-background { background: blue; }
396 span.fuchsia-background { background: fuchsia; }
397 span.gray-background { background: gray; }
398 span.green-background { background: green; }
399 span.lime-background { background: lime; }
400 span.maroon-background { background: maroon; }
401 span.navy-background { background: navy; }
402 span.olive-background { background: olive; }
403 span.purple-background { background: purple; }
404 span.red-background { background: red; }
405 span.silver-background { background: silver; }
406 span.teal-background { background: teal; }
407 span.white-background { background: white; }
408 span.yellow-background { background: yellow; }
410 span.big { font-size:
2em; }
411 span.small { font-size:
0.6em; }
413 span.underline { text-decoration: underline; }
414 span.overline { text-decoration: overline; }
415 span.line-through { text-decoration: line-through; }
417 div.unbreakable { page-break-inside: avoid; }
427 margin-bottom:
1.5em;
429 div.tableblock
> table {
430 border:
3px solid #
527bbd;
432 thead, p.table.header {
439 /* Because the table frame attribute is overridden by CSS in most browsers. */
440 div.tableblock
> table[
frame=
"void"] {
443 div.tableblock
> table[
frame=
"hsides"] {
444 border-left-style: none;
445 border-right-style: none;
447 div.tableblock
> table[
frame=
"vsides"] {
448 border-top-style: none;
449 border-bottom-style: none;
460 margin-bottom:
1.5em;
462 thead, p.tableblock.header {
473 border-color: #
527bbd;
474 border-collapse: collapse;
476 th.tableblock, td.tableblock {
480 border-color: #
527bbd;
483 table.tableblock.frame-topbot {
484 border-left-style: hidden;
485 border-right-style: hidden;
487 table.tableblock.frame-sides {
488 border-top-style: hidden;
489 border-bottom-style: hidden;
491 table.tableblock.frame-none {
492 border-style: hidden;
495 th.tableblock.halign-left, td.tableblock.halign-left {
498 th.tableblock.halign-center, td.tableblock.halign-center {
501 th.tableblock.halign-right, td.tableblock.halign-right {
505 th.tableblock.valign-top, td.tableblock.valign-top {
508 th.tableblock.valign-middle, td.tableblock.valign-middle {
509 vertical-align: middle;
511 th.tableblock.valign-bottom, td.tableblock.valign-bottom {
512 vertical-align: bottom;
523 padding-bottom:
0.5em;
524 border-top:
2px solid silver;
525 border-bottom:
2px solid silver;
530 body.manpage div.sectionbody {
535 body.manpage div#toc { display: none; }
540 <script type=
"text/javascript">
542 var asciidoc = { // Namespace.
544 /////////////////////////////////////////////////////////////////////
545 // Table Of Contents generator
546 /////////////////////////////////////////////////////////////////////
548 /* Author: Mihai Bazon, September
2002
549 * http://students.infoiasi.ro/~mishoo
551 * Table Of Content generator
554 * Feel free to use this script under the terms of the GNU General Public
555 * License, as long as you do not remove or alter this notice.
558 /* modified by Troy D. Hanson, September
2006. License: GPL */
559 /* modified by Stuart Rackham,
2006,
2009. License: GPL */
562 toc: function (toclevels) {
564 function getText(el) {
566 for (var i = el.firstChild; i != null; i = i.nextSibling) {
567 if (i.nodeType ==
3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
569 else if (i.firstChild != null)
575 function TocEntry(el, text, toclevel) {
578 this.toclevel = toclevel;
581 function tocEntries(el, toclevels) {
582 var result = new Array;
583 var re = new RegExp('[hH]([
1-'+(toclevels+
1)+'])');
584 // Function that scans the DOM tree for header elements (the DOM2
585 // nodeIterator API would be a better technique but not supported by all
587 var iterate = function (el) {
588 for (var i = el.firstChild; i != null; i = i.nextSibling) {
589 if (i.nodeType ==
1 /* Node.ELEMENT_NODE */) {
590 var mo = re.exec(i.tagName);
591 if (mo && (i.getAttribute(
"class") || i.getAttribute(
"className")) !=
"float") {
592 result[result.length] = new TocEntry(i, getText(i), mo[
1]-
1);
602 var toc = document.getElementById(
"toc");
607 // Delete existing TOC entries in case we're reloading the TOC.
608 var tocEntriesToRemove = [];
610 for (i =
0; i < toc.childNodes.length; i++) {
611 var entry = toc.childNodes[i];
612 if (entry.nodeName.toLowerCase() == 'div'
613 && entry.getAttribute(
"class")
614 && entry.getAttribute(
"class").match(/^toclevel/))
615 tocEntriesToRemove.push(entry);
617 for (i =
0; i < tocEntriesToRemove.length; i++) {
618 toc.removeChild(tocEntriesToRemove[i]);
621 // Rebuild TOC entries.
622 var entries = tocEntries(document.getElementById(
"content"), toclevels);
623 for (var i =
0; i < entries.length; ++i) {
624 var entry = entries[i];
625 if (entry.element.id ==
"")
626 entry.element.id =
"_toc_" + i;
627 var a = document.createElement(
"a");
628 a.href =
"#" + entry.element.id;
629 a.appendChild(document.createTextNode(entry.text));
630 var div = document.createElement(
"div");
632 div.className =
"toclevel" + entry.toclevel;
633 toc.appendChild(div);
635 if (entries.length ==
0)
636 toc.parentNode.removeChild(toc);
640 /////////////////////////////////////////////////////////////////////
641 // Footnotes generator
642 /////////////////////////////////////////////////////////////////////
644 /* Based on footnote generation code from:
645 * http://www.brandspankingnew.net/archive/
2005/
07/format_footnote.html
648 footnotes: function () {
649 // Delete existing footnote entries in case we're reloading the footnodes.
651 var noteholder = document.getElementById(
"footnotes");
655 var entriesToRemove = [];
656 for (i =
0; i < noteholder.childNodes.length; i++) {
657 var entry = noteholder.childNodes[i];
658 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute(
"class") ==
"footnote")
659 entriesToRemove.push(entry);
661 for (i =
0; i < entriesToRemove.length; i++) {
662 noteholder.removeChild(entriesToRemove[i]);
665 // Rebuild footnote entries.
666 var cont = document.getElementById(
"content");
667 var spans = cont.getElementsByTagName(
"span");
670 for (i=
0; i
<spans.length; i++) {
671 if (spans[i].className ==
"footnote") {
673 var note = spans[i].getAttribute(
"data-note");
675 // Use [\s\S] in place of . so multi-line matches work.
676 // Because JavaScript has no s (dotall) regex flag.
677 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[
1];
679 "[<a id='_footnoteref_" + n +
"' href='#_footnote_" + n +
680 "' title='View footnote' class='footnote'>" + n +
"</a>]";
681 spans[i].setAttribute(
"data-note", note);
683 noteholder.innerHTML +=
684 "<div class='footnote' id='_footnote_" + n +
"'>" +
685 "<a href='#_footnoteref_" + n +
"' title='Return to text'>" +
686 n +
"</a>. " + note +
"</div>";
687 var id =spans[i].getAttribute(
"id");
688 if (id != null) refs[
"#"+id] = n;
692 noteholder.parentNode.removeChild(noteholder);
694 // Process footnoterefs.
695 for (i=
0; i
<spans.length; i++) {
696 if (spans[i].className ==
"footnoteref") {
697 var href = spans[i].getElementsByTagName(
"a")[
0].getAttribute(
"href");
698 href = href.match(/#.*/)[
0]; // Because IE return full URL.
701 "[<a href='#_footnote_" + n +
702 "' title='View footnote' class='footnote'>" + n +
"</a>]";
708 install: function(toclevels) {
711 function reinstall() {
712 asciidoc.footnotes();
714 asciidoc.toc(toclevels);
718 function reinstallAndRemoveTimer() {
719 clearInterval(timerId);
723 timerId = setInterval(reinstall,
500);
724 if (document.addEventListener)
725 document.addEventListener(
"DOMContentLoaded", reinstallAndRemoveTimer, false);
727 window.onload = reinstallAndRemoveTimer;
735 <body class=
"manpage">
738 git-mergetool(
1) Manual Page
741 <div class=
"sectionbody">
743 Run merge conflict resolution tools to resolve merge conflicts
749 <h2 id=
"_synopsis">SYNOPSIS
</h2>
750 <div class=
"sectionbody">
751 <div class=
"verseblock">
752 <pre class=
"content"><em>git mergetool
</em> [--tool=
<tool
>] [-y | --[no-]prompt] [
<file
>…]
</pre>
753 <div class=
"attribution">
758 <h2 id=
"_description">DESCRIPTION
</h2>
759 <div class=
"sectionbody">
760 <div class=
"paragraph"><p>Use
<code>git mergetool
</code> to run one of several merge utilities to resolve
761 merge conflicts. It is typically run after
<em>git merge
</em>.
</p></div>
762 <div class=
"paragraph"><p>If one or more
<file
> parameters are given, the merge tool program will
763 be run to resolve differences in each file (skipping those without
764 conflicts). Specifying a directory will include all unresolved files in
765 that path. If no
<file
> names are specified,
<em>git mergetool
</em> will run
766 the merge tool program on every file with merge conflicts.
</p></div>
770 <h2 id=
"_options">OPTIONS
</h2>
771 <div class=
"sectionbody">
772 <div class=
"dlist"><dl>
781 Use the merge resolution program specified by
<tool
>.
782 Valid values include emerge, gvimdiff, kdiff3,
783 meld, vimdiff, and tortoisemerge. Run
<code>git mergetool --tool-help
</code>
784 for the list of valid
<tool
> settings.
786 <div class=
"paragraph"><p>If a merge resolution program is not specified,
<em>git mergetool
</em>
787 will use the configuration variable
<code>merge.tool
</code>. If the
788 configuration variable
<code>merge.tool
</code> is not set,
<em>git mergetool
</em>
789 will pick a suitable default.
</p></div>
790 <div class=
"paragraph"><p>You can explicitly provide a full path to the tool by setting the
791 configuration variable
<code>mergetool.
<tool
>.path
</code>. For example, you
792 can configure the absolute path to kdiff3 by setting
793 <code>mergetool.kdiff3.path
</code>. Otherwise,
<em>git mergetool
</em> assumes the
794 tool is available in PATH.
</p></div>
795 <div class=
"paragraph"><p>Instead of running one of the known merge tool programs,
796 <em>git mergetool
</em> can be customized to run an alternative program
797 by specifying the command line to invoke in a configuration
798 variable
<code>mergetool.
<tool
>.cmd
</code>.
</p></div>
799 <div class=
"paragraph"><p>When
<em>git mergetool
</em> is invoked with this tool (either through the
800 <code>-t
</code> or
<code>--tool
</code> option or the
<code>merge.tool
</code> configuration
801 variable), the configured command line will be invoked with
<code>$BASE
</code>
802 set to the name of a temporary file containing the common base for
803 the merge, if available;
<code>$LOCAL
</code> set to the name of a temporary
804 file containing the contents of the file on the current branch;
805 <code>$REMOTE
</code> set to the name of a temporary file containing the
806 contents of the file to be merged, and
<code>$MERGED
</code> set to the name
807 of the file to which the merge tool should write the result of the
808 merge resolution.
</p></div>
809 <div class=
"paragraph"><p>If the custom merge tool correctly indicates the success of a
810 merge resolution with its exit code, then the configuration
811 variable
<code>mergetool.
<tool
>.trustExitCode
</code> can be set to
<code>true
</code>.
812 Otherwise,
<em>git mergetool
</em> will prompt the user to indicate the
813 success of the resolution after the custom tool has exited.
</p></div>
820 Print a list of merge tools that may be used with
<code>--tool
</code>.
831 Don
’t prompt before each invocation of the merge resolution
833 This is the default if the merge resolution program is
834 explicitly specified with the
<code>--tool
</code> option or with the
835 <code>merge.tool
</code> configuration variable.
843 Prompt before each invocation of the merge resolution program
844 to give the user a chance to skip the path.
855 When
<em>git-mergetool
</em> is invoked with the
<code>-g
</code> or
<code>--gui
</code> option,
856 the default merge tool will be read from the configured
857 <code>merge.guitool
</code> variable instead of
<code>merge.tool
</code>. If
858 <code>merge.guitool
</code> is not set, we will fallback to the tool
859 configured under
<code>merge.tool
</code>. This may be autoselected using
860 the configuration variable
<code>mergetool.guiDefault
</code>.
868 This overrides a previous
<code>-g
</code> or
<code>--gui
</code> setting or
869 <code>mergetool.guiDefault
</code> configuration and reads the default merge
870 tool from the configured
<code>merge.tool
</code> variable.
878 Process files in the order specified in the
879 <orderfile
>, which has one shell glob pattern per line.
880 This overrides the
<code>diff.orderFile
</code> configuration variable
881 (see
<a href=
"git-config.html">git-config(
1)
</a>). To cancel
<code>diff.orderFile
</code>,
882 use
<code>-O/dev/null
</code>.
889 <h2 id=
"_configuration">CONFIGURATION
</h2>
890 <div class=
"sectionbody">
891 <div class=
"paragraph"><p>Everything below this line in this section is selectively included
892 from the
<a href=
"git-config.html">git-config(
1)
</a> documentation. The content is the same
893 as what
’s found there:
</p></div>
894 <div class=
"dlist"><dl>
896 mergetool.
<tool
>.path
900 Override the path for the given tool. This is useful in case
901 your tool is not in the PATH.
905 mergetool.
<tool
>.cmd
909 Specify the command to invoke the specified merge tool. The
910 specified command is evaluated in shell with the following
911 variables available:
<em>BASE
</em> is the name of a temporary file
912 containing the common base of the files to be merged, if available;
913 <em>LOCAL
</em> is the name of a temporary file containing the contents of
914 the file on the current branch;
<em>REMOTE
</em> is the name of a temporary
915 file containing the contents of the file from the branch being
916 merged;
<em>MERGED
</em> contains the name of the file to which the merge
917 tool should write the results of a successful merge.
921 mergetool.
<tool
>.hideResolved
925 Allows the user to override the global
<code>mergetool.hideResolved
</code> value
926 for a specific tool. See
<code>mergetool.hideResolved
</code> for the full
931 mergetool.
<tool
>.trustExitCode
935 For a custom merge command, specify whether the exit code of
936 the merge command can be used to determine whether the merge was
937 successful. If this is not set to true then the merge target file
938 timestamp is checked, and the merge is assumed to have been successful
939 if the file has been updated; otherwise, the user is prompted to
940 indicate the success of the merge.
944 mergetool.meld.hasOutput
948 Older versions of
<code>meld
</code> do not support the
<code>--output
</code> option.
949 Git will attempt to detect whether
<code>meld
</code> supports
<code>--output
</code>
950 by inspecting the output of
<code>meld --help
</code>. Configuring
951 <code>mergetool.meld.hasOutput
</code> will make Git skip these checks and
952 use the configured value instead. Setting
<code>mergetool.meld.hasOutput
</code>
953 to
<code>true
</code> tells Git to unconditionally use the
<code>--output
</code> option,
954 and
<code>false
</code> avoids using
<code>--output
</code>.
958 mergetool.meld.useAutoMerge
962 When the
<code>--auto-merge
</code> is given, meld will merge all non-conflicting
963 parts automatically, highlight the conflicting parts, and wait for
964 user decision. Setting
<code>mergetool.meld.useAutoMerge
</code> to
<code>true
</code> tells
965 Git to unconditionally use the
<code>--auto-merge
</code> option with
<code>meld
</code>.
966 Setting this value to
<code>auto
</code> makes git detect whether
<code>--auto-merge
</code>
967 is supported and will only use
<code>--auto-merge
</code> when available. A
968 value of
<code>false
</code> avoids using
<code>--auto-merge
</code> altogether, and is the
973 mergetool.
<vimdiff variant
>.layout
977 Configure the split window layout for vimdiff
’s
<code><variant
></code>, which is any of
<code>vimdiff
</code>,
978 <code>nvimdiff
</code>,
<code>gvimdiff
</code>.
979 Upon launching
<code>git mergetool
</code> with
<code>--tool=
<variant
></code> (or without
<code>--tool
</code>
980 if
<code>merge.tool
</code> is configured as
<code><variant
></code>), Git will consult
981 <code>mergetool.
<variant
>.layout
</code> to determine the tool
’s layout. If the
982 variant-specific configuration is not available,
<code>vimdiff
</code>'s is used as
983 fallback. If that too is not available, a default layout with
4 windows
984 will be used. To configure the layout, see the
<code>BACKEND SPECIFIC HINTS
</code>
989 mergetool.hideResolved
993 During a merge, Git will automatically resolve as many conflicts as
994 possible and write the
<em>MERGED
</em> file containing conflict markers around
995 any conflicts that it cannot resolve;
<em>LOCAL
</em> and
<em>REMOTE
</em> normally
996 represent the versions of the file from before Git
’s conflict
997 resolution. This flag causes
<em>LOCAL
</em> and
<em>REMOTE
</em> to be overwritten so
998 that only the unresolved conflicts are presented to the merge tool. Can
999 be configured per-tool via the
<code>mergetool.
<tool
>.hideResolved
</code>
1000 configuration variable. Defaults to
<code>false
</code>.
1003 <dt class=
"hdlist1">
1004 mergetool.keepBackup
1008 After performing a merge, the original file with conflict markers
1009 can be saved as a file with a
<code>.orig
</code> extension. If this variable
1010 is set to
<code>false
</code> then this file is not preserved. Defaults to
1011 <code>true
</code> (i.e. keep the backup files).
1014 <dt class=
"hdlist1">
1015 mergetool.keepTemporaries
1019 When invoking a custom merge tool, Git uses a set of temporary
1020 files to pass to the tool. If the tool returns an error and this
1021 variable is set to
<code>true
</code>, then these temporary files will be
1022 preserved; otherwise, they will be removed after the tool has
1023 exited. Defaults to
<code>false
</code>.
1026 <dt class=
"hdlist1">
1027 mergetool.writeToTemp
1031 Git writes temporary
<em>BASE
</em>,
<em>LOCAL
</em>, and
<em>REMOTE
</em> versions of
1032 conflicting files in the worktree by default. Git will attempt
1033 to use a temporary directory for these files when set
<code>true
</code>.
1034 Defaults to
<code>false
</code>.
1037 <dt class=
"hdlist1">
1042 Prompt before each invocation of the merge resolution program.
1045 <dt class=
"hdlist1">
1046 mergetool.guiDefault
1050 Set
<code>true
</code> to use the
<code>merge.guitool
</code> by default (equivalent to
1051 specifying the
<code>--gui
</code> argument), or
<code>auto
</code> to select
<code>merge.guitool
</code>
1052 or
<code>merge.tool
</code> depending on the presence of a
<code>DISPLAY
</code> environment
1053 variable value. The default is
<code>false
</code>, where the
<code>--gui
</code> argument
1054 must be provided explicitly for the
<code>merge.guitool
</code> to be used.
1061 <h2 id=
"_temporary_files">TEMPORARY FILES
</h2>
1062 <div class=
"sectionbody">
1063 <div class=
"paragraph"><p><code>git mergetool
</code> creates
<code>*.orig
</code> backup files while resolving merges.
1064 These are safe to remove once a file has been merged and its
1065 <code>git mergetool
</code> session has completed.
</p></div>
1066 <div class=
"paragraph"><p>Setting the
<code>mergetool.keepBackup
</code> configuration variable to
<code>false
</code>
1067 causes
<code>git mergetool
</code> to automatically remove the backup files as files
1068 are successfully merged.
</p></div>
1072 <h2 id=
"_backend_specific_hints">BACKEND SPECIFIC HINTS
</h2>
1073 <div class=
"sectionbody">
1075 <h3 id=
"_vimdiff">vimdiff
</h3>
1077 <h4 id=
"_description_2">Description
</h4>
1078 <div class=
"paragraph"><p>When specifying
<code>--tool=vimdiff
</code> in
<code>git mergetool
</code> Git will open Vim with a
4
1079 windows layout distributed in the following way:
</p></div>
1080 <div class=
"literalblock">
1081 <div class=
"content">
1082 <pre><code>------------------------------------------
1084 | LOCAL | BASE | REMOTE |
1086 ------------------------------------------
1090 ------------------------------------------
</code></pre>
1092 <div class=
"paragraph"><p><code>LOCAL
</code>,
<code>BASE
</code> and
<code>REMOTE
</code> are read-only buffers showing the contents of the
1093 conflicting file in specific commits (
"commit you are merging into",
"common
1094 ancestor commit" and
"commit you are merging from" respectively)
</p></div>
1095 <div class=
"paragraph"><p><code>MERGED
</code> is a writable buffer where you have to resolve the conflicts (using the
1096 other read-only buffers as a reference). Once you are done, save and exit Vim as
1097 usual (
<code>:wq
</code>) or, if you want to abort, exit using
<code>:cq
</code>.
</p></div>
1100 <h4 id=
"_layout_configuration">Layout configuration
</h4>
1101 <div class=
"paragraph"><p>You can change the windows layout used by Vim by setting configuration variable
1102 <code>mergetool.vimdiff.layout
</code> which accepts a string where the following separators
1103 have special meaning:
</p></div>
1104 <div class=
"ulist"><ul>
1107 <code>+
</code> is used to
"open a new tab"
1112 <code>,
</code> is used to
"open a new vertical split"
1117 <code>/
</code> is used to
"open a new horizontal split"
1122 <code>@
</code> is used to indicate the file containing the final version after
1123 solving the conflicts. If not present,
<code>MERGED
</code> will be used by default.
1127 <div class=
"paragraph"><p>The precedence of the operators is as follows (you can use parentheses to change
1129 <div class=
"literalblock">
1130 <div class=
"content">
1131 <pre><code>`@`
> `+`
> `/`
> `,`
</code></pre>
1133 <div class=
"paragraph"><p>Let
’s see some examples to understand how it works:
</p></div>
1134 <div class=
"ulist"><ul>
1137 <code>layout =
"(LOCAL,BASE,REMOTE)/MERGED"</code>
1139 <div class=
"openblock">
1140 <div class=
"content">
1141 <div class=
"paragraph"><p>This is exactly the same as the default layout we have already seen.
</p></div>
1142 <div class=
"paragraph"><p>Note that
<code>/
</code> has precedence over
<code>,
</code> and thus the parenthesis are not
1143 needed in this case. The next layout definition is equivalent:
</p></div>
1144 <div class=
"literalblock">
1145 <div class=
"content">
1146 <pre><code>layout =
"LOCAL,BASE,REMOTE / MERGED"</code></pre>
1152 <code>layout =
"LOCAL,MERGED,REMOTE"</code>
1154 <div class=
"openblock">
1155 <div class=
"content">
1156 <div class=
"paragraph"><p>If, for some reason, we are not interested in the
<code>BASE
</code> buffer.
</p></div>
1157 <div class=
"literalblock">
1158 <div class=
"content">
1159 <pre><code>------------------------------------------
1162 | LOCAL | MERGED | REMOTE |
1165 ------------------------------------------
</code></pre>
1171 <code>layout =
"MERGED"</code>
1173 <div class=
"openblock">
1174 <div class=
"content">
1175 <div class=
"paragraph"><p>Only the
<code>MERGED
</code> buffer will be shown. Note, however, that all the other
1176 ones are still loaded in vim, and you can access them with the
"buffers"
1178 <div class=
"literalblock">
1179 <div class=
"content">
1180 <pre><code>------------------------------------------
1186 ------------------------------------------
</code></pre>
1192 <code>layout =
"@LOCAL,REMOTE"</code>
1194 <div class=
"openblock">
1195 <div class=
"content">
1196 <div class=
"paragraph"><p>When
<code>MERGED
</code> is not present in the layout, you must
"mark" one of the
1197 buffers with an asterisk. That will become the buffer you need to edit and
1198 save after resolving the conflicts.
</p></div>
1199 <div class=
"literalblock">
1200 <div class=
"content">
1201 <pre><code>------------------------------------------
1209 ------------------------------------------
</code></pre>
1215 <code>layout =
"LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE"</code>
1217 <div class=
"openblock">
1218 <div class=
"content">
1219 <div class=
"paragraph"><p>Three tabs will open: the first one is a copy of the default layout, while
1220 the other two only show the differences between (
<code>BASE
</code> and
<code>LOCAL
</code>) and
1221 (
<code>BASE
</code> and
<code>REMOTE
</code>) respectively.
</p></div>
1222 <div class=
"literalblock">
1223 <div class=
"content">
1224 <pre><code>------------------------------------------
1225 |
<TAB #
1> | TAB #
2 | TAB #
3 | |
1226 ------------------------------------------
1228 | LOCAL | BASE | REMOTE |
1230 ------------------------------------------
1234 ------------------------------------------
</code></pre>
1236 <div class=
"literalblock">
1237 <div class=
"content">
1238 <pre><code>------------------------------------------
1239 | TAB #
1 |
<TAB #
2> | TAB #
3 | |
1240 ------------------------------------------
1248 ------------------------------------------
</code></pre>
1250 <div class=
"literalblock">
1251 <div class=
"content">
1252 <pre><code>------------------------------------------
1253 | TAB #
1 | TAB #
2 |
<TAB #
3> | |
1254 ------------------------------------------
1262 ------------------------------------------
</code></pre>
1268 <code>layout =
"LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL/BASE/REMOTE),MERGED"</code>
1270 <div class=
"openblock">
1271 <div class=
"content">
1272 <div class=
"paragraph"><p>Same as the previous example, but adds a fourth tab with the same
1273 information as the first tab, with a different layout.
</p></div>
1274 <div class=
"literalblock">
1275 <div class=
"content">
1276 <pre><code>---------------------------------------------
1277 | TAB #
1 | TAB #
2 | TAB #
3 |
<TAB #
4> |
1278 ---------------------------------------------
1280 |---------------------| |
1282 |---------------------| |
1284 ---------------------------------------------
</code></pre>
1286 <div class=
"paragraph"><p>Note how in the third tab definition we need to use parentheses to make
<code>,
</code>
1287 have precedence over
<code>/
</code>.
</p></div>
1293 <h4 id=
"_variants">Variants
</h4>
1294 <div class=
"paragraph"><p>Instead of
<code>--tool=vimdiff
</code>, you can also use one of these other variants:
</p></div>
1295 <div class=
"ulist"><ul>
1298 <code>--tool=gvimdiff
</code>, to open gVim instead of Vim.
1303 <code>--tool=nvimdiff
</code>, to open Neovim instead of Vim.
1307 <div class=
"paragraph"><p>When using these variants, in order to specify a custom layout you will have to
1308 set configuration variables
<code>mergetool.gvimdiff.layout
</code> and
1309 <code>mergetool.nvimdiff.layout
</code> instead of
<code>mergetool.vimdiff.layout
</code> (though the
1310 latter will be used as fallback if the variant-specific one is not set).
</p></div>
1311 <div class=
"paragraph"><p>In addition, for backwards compatibility with previous Git versions, you can
1312 also append
<code>1</code>,
<code>2</code> or
<code>3</code> to either
<code>vimdiff
</code> or any of the variants (ex:
1313 <code>vimdiff3
</code>,
<code>nvimdiff1
</code>, etc
…) to use a predefined layout.
1314 In other words, using
<code>--tool=[g,n,]vimdiffx
</code> is the same as using
1315 <code>--tool=[g,n,]vimdiff
</code> and setting configuration variable
1316 <code>mergetool.[g,n,]vimdiff.layout
</code> to
…</p></div>
1317 <div class=
"ulist"><ul>
1320 <code>x=
1</code>:
<code>"@LOCAL, REMOTE"</code>
1325 <code>x=
2</code>:
<code>"LOCAL, MERGED, REMOTE"</code>
1330 <code>x=
3</code>:
<code>"MERGED"</code>
1334 <div class=
"paragraph"><p>Example: using
<code>--tool=gvimdiff2
</code> will open
<code>gvim
</code> with three columns (LOCAL,
1335 MERGED and REMOTE).
</p></div>
1341 <h2 id=
"_git">GIT
</h2>
1342 <div class=
"sectionbody">
1343 <div class=
"paragraph"><p>Part of the
<a href=
"git.html">git(
1)
</a> suite
</p></div>
1347 <div id=
"footnotes"><hr /></div>
1349 <div id=
"footer-text">
1351 2023-
10-
23 14:
43:
46 PDT