Autogenerated HTML docs for v2.44.0-165-ge09f12
[git-htmldocs.git] / git-mergetool.html
blob3a7d9b799af025309a47f6657b85a302fe2a5e17
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">
5 <head>
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 */
12 /* Default font. */
13 body {
14 font-family: Georgia,serif;
17 /* Title font. */
18 h1, h2, h3, h4, h5, h6,
19 div.title, caption.title,
20 thead, p.table.header,
21 #toctitle,
22 #author, #revnumber, #revdate, #revremark,
23 #footer {
24 font-family: Arial,Helvetica,sans-serif;
27 body {
28 margin: 1em 5% 1em 5%;
31 a {
32 color: blue;
33 text-decoration: underline;
35 a:visited {
36 color: fuchsia;
39 em {
40 font-style: italic;
41 color: navy;
44 strong {
45 font-weight: bold;
46 color: #083194;
49 h1, h2, h3, h4, h5, h6 {
50 color: #527bbd;
51 margin-top: 1.2em;
52 margin-bottom: 0.5em;
53 line-height: 1.3;
56 h1, h2, h3 {
57 border-bottom: 2px solid silver;
59 h2 {
60 padding-top: 0.5em;
62 h3 {
63 float: left;
65 h3 + * {
66 clear: left;
68 h5 {
69 font-size: 1.0em;
72 div.sectionbody {
73 margin-left: 0;
76 hr {
77 border: 1px solid silver;
80 p {
81 margin-top: 0.5em;
82 margin-bottom: 0.5em;
85 ul, ol, li > p {
86 margin-top: 0;
88 ul > li { color: #aaa; }
89 ul > li > * { color: black; }
91 .monospaced, code, pre {
92 font-family: "Courier New", Courier, monospace;
93 font-size: inherit;
94 color: navy;
95 padding: 0;
96 margin: 0;
98 pre {
99 white-space: pre-wrap;
102 #author {
103 color: #527bbd;
104 font-weight: bold;
105 font-size: 1.1em;
107 #email {
109 #revnumber, #revdate, #revremark {
112 #footer {
113 font-size: small;
114 border-top: 2px solid silver;
115 padding-top: 0.5em;
116 margin-top: 4.0em;
118 #footer-text {
119 float: left;
120 padding-bottom: 0.5em;
122 #footer-badges {
123 float: right;
124 padding-bottom: 0.5em;
127 #preamble {
128 margin-top: 1.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 {
134 margin-top: 1.0em;
135 margin-bottom: 1.5em;
137 div.admonitionblock {
138 margin-top: 2.0em;
139 margin-bottom: 2.0em;
140 margin-right: 10%;
141 color: #606060;
144 div.content { /* Block element content. */
145 padding: 0;
148 /* Block element titles. */
149 div.title, caption.title {
150 color: #527bbd;
151 font-weight: bold;
152 text-align: left;
153 margin-top: 1.0em;
154 margin-bottom: 0.5em;
156 div.title + * {
157 margin-top: 0;
160 td div.title:first-child {
161 margin-top: 0.0em;
163 div.content div.title:first-child {
164 margin-top: 0.0em;
166 div.content + div.title {
167 margin-top: 0.0em;
170 div.sidebarblock > div.content {
171 background: #ffffee;
172 border: 1px solid #dddddd;
173 border-left: 4px solid #f0f0f0;
174 padding: 0.5em;
177 div.listingblock > div.content {
178 border: 1px solid #dddddd;
179 border-left: 5px solid #f0f0f0;
180 background: #f8f8f8;
181 padding: 0.5em;
184 div.quoteblock, div.verseblock {
185 padding-left: 1.0em;
186 margin-left: 1.0em;
187 margin-right: 10%;
188 border-left: 5px solid #f0f0f0;
189 color: #888;
192 div.quoteblock > div.attribution {
193 padding-top: 0.5em;
194 text-align: right;
197 div.verseblock > pre.content {
198 font-family: inherit;
199 font-size: inherit;
201 div.verseblock > div.attribution {
202 padding-top: 0.75em;
203 text-align: left;
205 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
206 div.verseblock + div.attribution {
207 text-align: left;
210 div.admonitionblock .icon {
211 vertical-align: top;
212 font-size: 1.1em;
213 font-weight: bold;
214 text-decoration: underline;
215 color: #527bbd;
216 padding-right: 0.5em;
218 div.admonitionblock td.content {
219 padding-left: 0.5em;
220 border-left: 3px solid #dddddd;
223 div.exampleblock > div.content {
224 border-left: 3px solid #dddddd;
225 padding-left: 0.5em;
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; }
232 dl {
233 margin-top: 0.8em;
234 margin-bottom: 0.8em;
236 dt {
237 margin-top: 0.5em;
238 margin-bottom: 0;
239 font-style: normal;
240 color: navy;
242 dd > *:first-child {
243 margin-top: 0.1em;
246 ul, ol {
247 list-style-position: outside;
249 ol.arabic {
250 list-style-type: decimal;
252 ol.loweralpha {
253 list-style-type: lower-alpha;
255 ol.upperalpha {
256 list-style-type: upper-alpha;
258 ol.lowerroman {
259 list-style-type: lower-roman;
261 ol.upperroman {
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 {
268 margin-top: 0.1em;
269 margin-bottom: 0.1em;
272 tfoot {
273 font-weight: bold;
275 td > div.verse {
276 white-space: pre;
279 div.hdlist {
280 margin-top: 0.8em;
281 margin-bottom: 0.8em;
283 div.hdlist tr {
284 padding-bottom: 15px;
286 dt.hdlist1.strong, td.hdlist1.strong {
287 font-weight: bold;
289 td.hdlist1 {
290 vertical-align: top;
291 font-style: normal;
292 padding-right: 0.8em;
293 color: navy;
295 td.hdlist2 {
296 vertical-align: top;
298 div.hdlist.compact tr {
299 margin: 0;
300 padding-bottom: 0;
303 .comment {
304 background: yellow;
307 .footnote, .footnoteref {
308 font-size: 0.8em;
311 span.footnote, span.footnoteref {
312 vertical-align: super;
315 #footnotes {
316 margin: 20px 0 20px 0;
317 padding: 7px 0 0 0;
320 #footnotes div.footnote {
321 margin: 0 0 5px 0;
324 #footnotes hr {
325 border: none;
326 border-top: 1px solid silver;
327 height: 1px;
328 text-align: left;
329 margin-left: 0;
330 width: 20%;
331 min-width: 100px;
334 div.colist td {
335 padding-right: 0.5em;
336 padding-bottom: 0.3em;
337 vertical-align: top;
339 div.colist td img {
340 margin-top: 0.3em;
343 @media print {
344 #footer-badges { display: none; }
347 #toc {
348 margin-bottom: 2.5em;
351 #toctitle {
352 color: #527bbd;
353 font-size: 1.1em;
354 font-weight: bold;
355 margin-top: 1.0em;
356 margin-bottom: 0.1em;
359 div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
360 margin-top: 0;
361 margin-bottom: 0;
363 div.toclevel2 {
364 margin-left: 2em;
365 font-size: 0.9em;
367 div.toclevel3 {
368 margin-left: 4em;
369 font-size: 0.9em;
371 div.toclevel4 {
372 margin-left: 6em;
373 font-size: 0.9em;
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; }
421 * xhtml11 specific
423 * */
425 div.tableblock {
426 margin-top: 1.0em;
427 margin-bottom: 1.5em;
429 div.tableblock > table {
430 border: 3px solid #527bbd;
432 thead, p.table.header {
433 font-weight: bold;
434 color: #527bbd;
436 p.table {
437 margin-top: 0;
439 /* Because the table frame attribute is overridden by CSS in most browsers. */
440 div.tableblock > table[frame="void"] {
441 border-style: none;
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;
454 * html5 specific
456 * */
458 table.tableblock {
459 margin-top: 1.0em;
460 margin-bottom: 1.5em;
462 thead, p.tableblock.header {
463 font-weight: bold;
464 color: #527bbd;
466 p.tableblock {
467 margin-top: 0;
469 table.tableblock {
470 border-width: 3px;
471 border-spacing: 0px;
472 border-style: solid;
473 border-color: #527bbd;
474 border-collapse: collapse;
476 th.tableblock, td.tableblock {
477 border-width: 1px;
478 padding: 4px;
479 border-style: solid;
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 {
496 text-align: left;
498 th.tableblock.halign-center, td.tableblock.halign-center {
499 text-align: center;
501 th.tableblock.halign-right, td.tableblock.halign-right {
502 text-align: right;
505 th.tableblock.valign-top, td.tableblock.valign-top {
506 vertical-align: 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;
517 * manpage specific
519 * */
521 body.manpage h1 {
522 padding-top: 0.5em;
523 padding-bottom: 0.5em;
524 border-top: 2px solid silver;
525 border-bottom: 2px solid silver;
527 body.manpage h2 {
528 border-style: none;
530 body.manpage div.sectionbody {
531 margin-left: 3em;
534 @media print {
535 body.manpage div#toc { display: none; }
539 </style>
540 <script type="text/javascript">
541 /*<![CDATA[*/
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
552 * Version: 0.4
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 */
561 // toclevels = 1..4.
562 toc: function (toclevels) {
564 function getText(el) {
565 var text = "";
566 for (var i = el.firstChild; i != null; i = i.nextSibling) {
567 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
568 text += i.data;
569 else if (i.firstChild != null)
570 text += getText(i);
572 return text;
575 function TocEntry(el, text, toclevel) {
576 this.element = el;
577 this.text = text;
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
586 // browsers).
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);
594 iterate(i);
598 iterate(el);
599 return result;
602 var toc = document.getElementById("toc");
603 if (!toc) {
604 return;
607 // Delete existing TOC entries in case we're reloading the TOC.
608 var tocEntriesToRemove = [];
609 var i;
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");
631 div.appendChild(a);
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.
650 var i;
651 var noteholder = document.getElementById("footnotes");
652 if (!noteholder) {
653 return;
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");
668 var refs = {};
669 var n = 0;
670 for (i=0; i<spans.length; i++) {
671 if (spans[i].className == "footnote") {
672 n++;
673 var note = spans[i].getAttribute("data-note");
674 if (!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];
678 spans[i].innerHTML =
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;
691 if (n == 0)
692 noteholder.parentNode.removeChild(noteholder);
693 else {
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.
699 n = refs[href];
700 spans[i].innerHTML =
701 "[<a href='#_footnote_" + n +
702 "' title='View footnote' class='footnote'>" + n + "</a>]";
708 install: function(toclevels) {
709 var timerId;
711 function reinstall() {
712 asciidoc.footnotes();
713 if (toclevels) {
714 asciidoc.toc(toclevels);
718 function reinstallAndRemoveTimer() {
719 clearInterval(timerId);
720 reinstall();
723 timerId = setInterval(reinstall, 500);
724 if (document.addEventListener)
725 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
726 else
727 window.onload = reinstallAndRemoveTimer;
731 asciidoc.install();
732 /*]]>*/
733 </script>
734 </head>
735 <body class="manpage">
736 <div id="header">
737 <h1>
738 git-mergetool(1) Manual Page
739 </h1>
740 <h2>NAME</h2>
741 <div class="sectionbody">
742 <p>git-mergetool -
743 Run merge conflict resolution tools to resolve merge conflicts
744 </p>
745 </div>
746 </div>
747 <div id="content">
748 <div class="sect1">
749 <h2 id="_synopsis">SYNOPSIS</h2>
750 <div class="sectionbody">
751 <div class="verseblock">
752 <pre class="content"><em>git mergetool</em> [--tool=&lt;tool&gt;] [-y | --[no-]prompt] [&lt;file&gt;&#8230;]</pre>
753 <div class="attribution">
754 </div></div>
755 </div>
756 </div>
757 <div class="sect1">
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 &lt;file&gt; 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 &lt;file&gt; names are specified, <em>git mergetool</em> will run
766 the merge tool program on every file with merge conflicts.</p></div>
767 </div>
768 </div>
769 <div class="sect1">
770 <h2 id="_options">OPTIONS</h2>
771 <div class="sectionbody">
772 <div class="dlist"><dl>
773 <dt class="hdlist1">
774 -t &lt;tool&gt;
775 </dt>
776 <dt class="hdlist1">
777 --tool=&lt;tool&gt;
778 </dt>
779 <dd>
781 Use the merge resolution program specified by &lt;tool&gt;.
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 &lt;tool&gt; settings.
785 </p>
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.&lt;tool&gt;.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.&lt;tool&gt;.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.&lt;tool&gt;.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>
814 </dd>
815 <dt class="hdlist1">
816 --tool-help
817 </dt>
818 <dd>
820 Print a list of merge tools that may be used with <code>--tool</code>.
821 </p>
822 </dd>
823 <dt class="hdlist1">
825 </dt>
826 <dt class="hdlist1">
827 --no-prompt
828 </dt>
829 <dd>
831 Don&#8217;t prompt before each invocation of the merge resolution
832 program.
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.
836 </p>
837 </dd>
838 <dt class="hdlist1">
839 --prompt
840 </dt>
841 <dd>
843 Prompt before each invocation of the merge resolution program
844 to give the user a chance to skip the path.
845 </p>
846 </dd>
847 <dt class="hdlist1">
849 </dt>
850 <dt class="hdlist1">
851 --gui
852 </dt>
853 <dd>
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>.
861 </p>
862 </dd>
863 <dt class="hdlist1">
864 --no-gui
865 </dt>
866 <dd>
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.
871 </p>
872 </dd>
873 <dt class="hdlist1">
874 -O&lt;orderfile&gt;
875 </dt>
876 <dd>
878 Process files in the order specified in the
879 &lt;orderfile&gt;, 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>.
883 </p>
884 </dd>
885 </dl></div>
886 </div>
887 </div>
888 <div class="sect1">
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&#8217;s found there:</p></div>
894 <div class="dlist"><dl>
895 <dt class="hdlist1">
896 mergetool.&lt;tool&gt;.path
897 </dt>
898 <dd>
900 Override the path for the given tool. This is useful in case
901 your tool is not in the PATH.
902 </p>
903 </dd>
904 <dt class="hdlist1">
905 mergetool.&lt;tool&gt;.cmd
906 </dt>
907 <dd>
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.
918 </p>
919 </dd>
920 <dt class="hdlist1">
921 mergetool.&lt;tool&gt;.hideResolved
922 </dt>
923 <dd>
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
927 description.
928 </p>
929 </dd>
930 <dt class="hdlist1">
931 mergetool.&lt;tool&gt;.trustExitCode
932 </dt>
933 <dd>
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.
941 </p>
942 </dd>
943 <dt class="hdlist1">
944 mergetool.meld.hasOutput
945 </dt>
946 <dd>
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>.
955 </p>
956 </dd>
957 <dt class="hdlist1">
958 mergetool.meld.useAutoMerge
959 </dt>
960 <dd>
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
969 default value.
970 </p>
971 </dd>
972 <dt class="hdlist1">
973 mergetool.&lt;vimdiff variant&gt;.layout
974 </dt>
975 <dd>
977 Configure the split window layout for vimdiff&#8217;s <code>&lt;variant&gt;</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=&lt;variant&gt;</code> (or without <code>--tool</code>
980 if <code>merge.tool</code> is configured as <code>&lt;variant&gt;</code>), Git will consult
981 <code>mergetool.&lt;variant&gt;.layout</code> to determine the tool&#8217;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>
985 section.
986 </p>
987 </dd>
988 <dt class="hdlist1">
989 mergetool.hideResolved
990 </dt>
991 <dd>
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&#8217;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.&lt;tool&gt;.hideResolved</code>
1000 configuration variable. Defaults to <code>false</code>.
1001 </p>
1002 </dd>
1003 <dt class="hdlist1">
1004 mergetool.keepBackup
1005 </dt>
1006 <dd>
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).
1012 </p>
1013 </dd>
1014 <dt class="hdlist1">
1015 mergetool.keepTemporaries
1016 </dt>
1017 <dd>
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>.
1024 </p>
1025 </dd>
1026 <dt class="hdlist1">
1027 mergetool.writeToTemp
1028 </dt>
1029 <dd>
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>.
1035 </p>
1036 </dd>
1037 <dt class="hdlist1">
1038 mergetool.prompt
1039 </dt>
1040 <dd>
1042 Prompt before each invocation of the merge resolution program.
1043 </p>
1044 </dd>
1045 <dt class="hdlist1">
1046 mergetool.guiDefault
1047 </dt>
1048 <dd>
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.
1055 </p>
1056 </dd>
1057 </dl></div>
1058 </div>
1059 </div>
1060 <div class="sect1">
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>
1069 </div>
1070 </div>
1071 <div class="sect1">
1072 <h2 id="_backend_specific_hints">BACKEND SPECIFIC HINTS</h2>
1073 <div class="sectionbody">
1074 <div class="sect2">
1075 <h3 id="_vimdiff">vimdiff</h3>
1076 <div class="sect3">
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>------------------------------------------
1083 | | | |
1084 | LOCAL | BASE | REMOTE |
1085 | | | |
1086 ------------------------------------------
1088 | MERGED |
1090 ------------------------------------------</code></pre>
1091 </div></div>
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>
1098 </div>
1099 <div class="sect3">
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>
1105 <li>
1107 <code>+</code> is used to "open a new tab"
1108 </p>
1109 </li>
1110 <li>
1112 <code>,</code> is used to "open a new vertical split"
1113 </p>
1114 </li>
1115 <li>
1117 <code>/</code> is used to "open a new horizontal split"
1118 </p>
1119 </li>
1120 <li>
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.
1124 </p>
1125 </li>
1126 </ul></div>
1127 <div class="paragraph"><p>The precedence of the operators is as follows (you can use parentheses to change
1128 it):</p></div>
1129 <div class="literalblock">
1130 <div class="content">
1131 <pre><code>`@` &gt; `+` &gt; `/` &gt; `,`</code></pre>
1132 </div></div>
1133 <div class="paragraph"><p>Let&#8217;s see some examples to understand how it works:</p></div>
1134 <div class="ulist"><ul>
1135 <li>
1137 <code>layout = "(LOCAL,BASE,REMOTE)/MERGED"</code>
1138 </p>
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>
1147 </div></div>
1148 </div></div>
1149 </li>
1150 <li>
1152 <code>layout = "LOCAL,MERGED,REMOTE"</code>
1153 </p>
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>------------------------------------------
1160 | | | |
1161 | | | |
1162 | LOCAL | MERGED | REMOTE |
1163 | | | |
1164 | | | |
1165 ------------------------------------------</code></pre>
1166 </div></div>
1167 </div></div>
1168 </li>
1169 <li>
1171 <code>layout = "MERGED"</code>
1172 </p>
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"
1177 command.</p></div>
1178 <div class="literalblock">
1179 <div class="content">
1180 <pre><code>------------------------------------------
1183 | MERGED |
1186 ------------------------------------------</code></pre>
1187 </div></div>
1188 </div></div>
1189 </li>
1190 <li>
1192 <code>layout = "@LOCAL,REMOTE"</code>
1193 </p>
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>------------------------------------------
1202 | | |
1203 | | |
1204 | | |
1205 | LOCAL | REMOTE |
1206 | | |
1207 | | |
1208 | | |
1209 ------------------------------------------</code></pre>
1210 </div></div>
1211 </div></div>
1212 </li>
1213 <li>
1215 <code>layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE"</code>
1216 </p>
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 | &lt;TAB #1&gt; | TAB #2 | TAB #3 | |
1226 ------------------------------------------
1227 | | | |
1228 | LOCAL | BASE | REMOTE |
1229 | | | |
1230 ------------------------------------------
1232 | MERGED |
1234 ------------------------------------------</code></pre>
1235 </div></div>
1236 <div class="literalblock">
1237 <div class="content">
1238 <pre><code>------------------------------------------
1239 | TAB #1 | &lt;TAB #2&gt; | TAB #3 | |
1240 ------------------------------------------
1241 | | |
1242 | | |
1243 | | |
1244 | BASE | LOCAL |
1245 | | |
1246 | | |
1247 | | |
1248 ------------------------------------------</code></pre>
1249 </div></div>
1250 <div class="literalblock">
1251 <div class="content">
1252 <pre><code>------------------------------------------
1253 | TAB #1 | TAB #2 | &lt;TAB #3&gt; | |
1254 ------------------------------------------
1255 | | |
1256 | | |
1257 | | |
1258 | BASE | REMOTE |
1259 | | |
1260 | | |
1261 | | |
1262 ------------------------------------------</code></pre>
1263 </div></div>
1264 </div></div>
1265 </li>
1266 <li>
1268 <code>layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL/BASE/REMOTE),MERGED"</code>
1269 </p>
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 | &lt;TAB #4&gt; |
1278 ---------------------------------------------
1279 | LOCAL | |
1280 |---------------------| |
1281 | BASE | MERGED |
1282 |---------------------| |
1283 | REMOTE | |
1284 ---------------------------------------------</code></pre>
1285 </div></div>
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>
1288 </div></div>
1289 </li>
1290 </ul></div>
1291 </div>
1292 <div class="sect3">
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>
1296 <li>
1298 <code>--tool=gvimdiff</code>, to open gVim instead of Vim.
1299 </p>
1300 </li>
1301 <li>
1303 <code>--tool=nvimdiff</code>, to open Neovim instead of Vim.
1304 </p>
1305 </li>
1306 </ul></div>
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&#8230;) 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&#8230;</p></div>
1317 <div class="ulist"><ul>
1318 <li>
1320 <code>x=1</code>: <code>"@LOCAL, REMOTE"</code>
1321 </p>
1322 </li>
1323 <li>
1325 <code>x=2</code>: <code>"LOCAL, MERGED, REMOTE"</code>
1326 </p>
1327 </li>
1328 <li>
1330 <code>x=3</code>: <code>"MERGED"</code>
1331 </p>
1332 </li>
1333 </ul></div>
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>
1336 </div>
1337 </div>
1338 </div>
1339 </div>
1340 <div class="sect1">
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>
1344 </div>
1345 </div>
1346 </div>
1347 <div id="footnotes"><hr /></div>
1348 <div id="footer">
1349 <div id="footer-text">
1350 Last updated
1351 2023-10-23 14:43:46 PDT
1352 </div>
1353 </div>
1354 </body>
1355 </html>