blob: 4c63bc6753926be11beaeaeb00bcab0d3964cf2b [file] [log] [blame]
Junio C Hamano944ce252018-05-30 22:25:261<?xml version="1.0" encoding="UTF-8"?>
Junio C Hamano7d06a8a2008-10-20 05:42:332<!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>
Junio C Hamano9d971152012-12-19 00:43:116<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
Junio C Hamanoa85030a2022-07-27 16:48:217<meta name="generator" content="AsciiDoc 10.2.0" />
Junio C Hamano103b5722011-01-31 05:03:458<title>gitworkflows(7)</title>
Junio C Hamano7d06a8a2008-10-20 05:42:339<style type="text/css">
Junio C Hamano9d971152012-12-19 00:43:1110/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
11
12/* Default font. */
13body {
14 font-family: Georgia,serif;
15}
16
17/* Title font. */
18h1, h2, h3, h4, h5, h6,
19div.title, caption.title,
20thead, p.table.header,
21#toctitle,
22#author, #revnumber, #revdate, #revremark,
23#footer {
24 font-family: Arial,Helvetica,sans-serif;
Junio C Hamano7d06a8a2008-10-20 05:42:3325}
26
27body {
28 margin: 1em 5% 1em 5%;
29}
30
31a {
32 color: blue;
33 text-decoration: underline;
34}
35a:visited {
36 color: fuchsia;
37}
38
39em {
40 font-style: italic;
Junio C Hamano103b5722011-01-31 05:03:4541 color: navy;
Junio C Hamano7d06a8a2008-10-20 05:42:3342}
43
44strong {
45 font-weight: bold;
Junio C Hamano103b5722011-01-31 05:03:4546 color: #083194;
Junio C Hamano7d06a8a2008-10-20 05:42:3347}
48
Junio C Hamano7d06a8a2008-10-20 05:42:3349h1, h2, h3, h4, h5, h6 {
50 color: #527bbd;
Junio C Hamano7d06a8a2008-10-20 05:42:3351 margin-top: 1.2em;
52 margin-bottom: 0.5em;
53 line-height: 1.3;
54}
55
56h1, h2, h3 {
57 border-bottom: 2px solid silver;
58}
59h2 {
60 padding-top: 0.5em;
61}
62h3 {
63 float: left;
64}
65h3 + * {
66 clear: left;
67}
Junio C Hamano9d971152012-12-19 00:43:1168h5 {
69 font-size: 1.0em;
70}
Junio C Hamano7d06a8a2008-10-20 05:42:3371
72div.sectionbody {
Junio C Hamano7d06a8a2008-10-20 05:42:3373 margin-left: 0;
74}
75
76hr {
77 border: 1px solid silver;
78}
79
80p {
81 margin-top: 0.5em;
82 margin-bottom: 0.5em;
83}
84
Junio C Hamano103b5722011-01-31 05:03:4585ul, ol, li > p {
86 margin-top: 0;
87}
Junio C Hamano9d971152012-12-19 00:43:1188ul > li { color: #aaa; }
89ul > li > * { color: black; }
Junio C Hamano103b5722011-01-31 05:03:4590
Junio C Hamanoc14e6ad2014-10-31 20:25:5391.monospaced, code, pre {
92 font-family: "Courier New", Courier, monospace;
93 font-size: inherit;
94 color: navy;
Junio C Hamano7d06a8a2008-10-20 05:42:3395 padding: 0;
96 margin: 0;
97}
Junio C Hamanoc14e6ad2014-10-31 20:25:5398pre {
99 white-space: pre-wrap;
100}
Junio C Hamano7d06a8a2008-10-20 05:42:33101
Junio C Hamano9d971152012-12-19 00:43:11102#author {
Junio C Hamano7d06a8a2008-10-20 05:42:33103 color: #527bbd;
Junio C Hamano7d06a8a2008-10-20 05:42:33104 font-weight: bold;
105 font-size: 1.1em;
106}
Junio C Hamano9d971152012-12-19 00:43:11107#email {
Junio C Hamano7d06a8a2008-10-20 05:42:33108}
Junio C Hamano9d971152012-12-19 00:43:11109#revnumber, #revdate, #revremark {
Junio C Hamano7d06a8a2008-10-20 05:42:33110}
111
Junio C Hamano9d971152012-12-19 00:43:11112#footer {
Junio C Hamano7d06a8a2008-10-20 05:42:33113 font-size: small;
114 border-top: 2px solid silver;
115 padding-top: 0.5em;
116 margin-top: 4.0em;
117}
Junio C Hamano9d971152012-12-19 00:43:11118#footer-text {
Junio C Hamano7d06a8a2008-10-20 05:42:33119 float: left;
120 padding-bottom: 0.5em;
121}
Junio C Hamano9d971152012-12-19 00:43:11122#footer-badges {
Junio C Hamano7d06a8a2008-10-20 05:42:33123 float: right;
124 padding-bottom: 0.5em;
125}
126
Junio C Hamano9d971152012-12-19 00:43:11127#preamble {
Junio C Hamano103b5722011-01-31 05:03:45128 margin-top: 1.5em;
129 margin-bottom: 1.5em;
130}
Junio C Hamano9d971152012-12-19 00:43:11131div.imageblock, div.exampleblock, div.verseblock,
Junio C Hamano7d06a8a2008-10-20 05:42:33132div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
133div.admonitionblock {
Junio C Hamano7bd050f2011-09-22 06:32:22134 margin-top: 1.0em;
Junio C Hamano7d06a8a2008-10-20 05:42:33135 margin-bottom: 1.5em;
136}
137div.admonitionblock {
Junio C Hamano7bd050f2011-09-22 06:32:22138 margin-top: 2.0em;
139 margin-bottom: 2.0em;
140 margin-right: 10%;
141 color: #606060;
Junio C Hamano7d06a8a2008-10-20 05:42:33142}
143
144div.content { /* Block element content. */
145 padding: 0;
146}
147
148/* Block element titles. */
149div.title, caption.title {
Junio C Hamano103b5722011-01-31 05:03:45150 color: #527bbd;
Junio C Hamano7d06a8a2008-10-20 05:42:33151 font-weight: bold;
152 text-align: left;
153 margin-top: 1.0em;
154 margin-bottom: 0.5em;
155}
156div.title + * {
157 margin-top: 0;
158}
159
160td div.title:first-child {
161 margin-top: 0.0em;
162}
163div.content div.title:first-child {
164 margin-top: 0.0em;
165}
166div.content + div.title {
167 margin-top: 0.0em;
168}
169
170div.sidebarblock > div.content {
171 background: #ffffee;
Junio C Hamano9d971152012-12-19 00:43:11172 border: 1px solid #dddddd;
173 border-left: 4px solid #f0f0f0;
Junio C Hamano7d06a8a2008-10-20 05:42:33174 padding: 0.5em;
175}
176
Junio C Hamano7d06a8a2008-10-20 05:42:33177div.listingblock > div.content {
Junio C Hamano9d971152012-12-19 00:43:11178 border: 1px solid #dddddd;
179 border-left: 5px solid #f0f0f0;
180 background: #f8f8f8;
Junio C Hamano7d06a8a2008-10-20 05:42:33181 padding: 0.5em;
182}
183
Junio C Hamano7bd050f2011-09-22 06:32:22184div.quoteblock, div.verseblock {
185 padding-left: 1.0em;
186 margin-left: 1.0em;
Junio C Hamano103b5722011-01-31 05:03:45187 margin-right: 10%;
Junio C Hamano9d971152012-12-19 00:43:11188 border-left: 5px solid #f0f0f0;
189 color: #888;
Junio C Hamano7d06a8a2008-10-20 05:42:33190}
Junio C Hamano7bd050f2011-09-22 06:32:22191
Junio C Hamano103b5722011-01-31 05:03:45192div.quoteblock > div.attribution {
193 padding-top: 0.5em;
Junio C Hamano7d06a8a2008-10-20 05:42:33194 text-align: right;
195}
Junio C Hamano103b5722011-01-31 05:03:45196
Junio C Hamano9d971152012-12-19 00:43:11197div.verseblock > pre.content {
198 font-family: inherit;
199 font-size: inherit;
Junio C Hamano103b5722011-01-31 05:03:45200}
201div.verseblock > div.attribution {
202 padding-top: 0.75em;
203 text-align: left;
204}
205/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
Junio C Hamano7d06a8a2008-10-20 05:42:33206div.verseblock + div.attribution {
207 text-align: left;
208}
209
210div.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;
217}
218div.admonitionblock td.content {
219 padding-left: 0.5em;
Junio C Hamano7bd050f2011-09-22 06:32:22220 border-left: 3px solid #dddddd;
Junio C Hamano7d06a8a2008-10-20 05:42:33221}
222
223div.exampleblock > div.content {
Junio C Hamano7bd050f2011-09-22 06:32:22224 border-left: 3px solid #dddddd;
225 padding-left: 0.5em;
Junio C Hamano7d06a8a2008-10-20 05:42:33226}
227
Junio C Hamano7d06a8a2008-10-20 05:42:33228div.imageblock div.content { padding-left: 0; }
Junio C Hamanoc14e6ad2014-10-31 20:25:53229span.image img { border-style: none; vertical-align: text-bottom; }
Junio C Hamano103b5722011-01-31 05:03:45230a.image:visited { color: white; }
Junio C Hamano7d06a8a2008-10-20 05:42:33231
232dl {
233 margin-top: 0.8em;
234 margin-bottom: 0.8em;
235}
236dt {
237 margin-top: 0.5em;
238 margin-bottom: 0;
Junio C Hamano103b5722011-01-31 05:03:45239 font-style: normal;
240 color: navy;
Junio C Hamano7d06a8a2008-10-20 05:42:33241}
242dd > *:first-child {
Junio C Hamano103b5722011-01-31 05:03:45243 margin-top: 0.1em;
Junio C Hamano7d06a8a2008-10-20 05:42:33244}
245
246ul, ol {
247 list-style-position: outside;
248}
Junio C Hamano103b5722011-01-31 05:03:45249ol.arabic {
250 list-style-type: decimal;
251}
252ol.loweralpha {
Junio C Hamano7d06a8a2008-10-20 05:42:33253 list-style-type: lower-alpha;
254}
Junio C Hamano103b5722011-01-31 05:03:45255ol.upperalpha {
256 list-style-type: upper-alpha;
257}
258ol.lowerroman {
259 list-style-type: lower-roman;
260}
261ol.upperroman {
262 list-style-type: upper-roman;
263}
264
265div.compact ul, div.compact ol,
266div.compact p, div.compact p,
267div.compact div, div.compact div {
268 margin-top: 0.1em;
269 margin-bottom: 0.1em;
270}
Junio C Hamano7d06a8a2008-10-20 05:42:33271
Junio C Hamano7d06a8a2008-10-20 05:42:33272tfoot {
273 font-weight: bold;
274}
Junio C Hamano103b5722011-01-31 05:03:45275td > div.verse {
276 white-space: pre;
277}
Junio C Hamano103b5722011-01-31 05:03:45278
279div.hdlist {
Junio C Hamano7d06a8a2008-10-20 05:42:33280 margin-top: 0.8em;
281 margin-bottom: 0.8em;
282}
Junio C Hamano103b5722011-01-31 05:03:45283div.hdlist tr {
284 padding-bottom: 15px;
Junio C Hamano7d06a8a2008-10-20 05:42:33285}
Junio C Hamano103b5722011-01-31 05:03:45286dt.hdlist1.strong, td.hdlist1.strong {
287 font-weight: bold;
288}
289td.hdlist1 {
Junio C Hamano7d06a8a2008-10-20 05:42:33290 vertical-align: top;
Junio C Hamano103b5722011-01-31 05:03:45291 font-style: normal;
Junio C Hamano7d06a8a2008-10-20 05:42:33292 padding-right: 0.8em;
Junio C Hamano103b5722011-01-31 05:03:45293 color: navy;
Junio C Hamano7d06a8a2008-10-20 05:42:33294}
Junio C Hamano103b5722011-01-31 05:03:45295td.hdlist2 {
Junio C Hamano7d06a8a2008-10-20 05:42:33296 vertical-align: top;
297}
Junio C Hamano103b5722011-01-31 05:03:45298div.hdlist.compact tr {
299 margin: 0;
300 padding-bottom: 0;
301}
302
303.comment {
304 background: yellow;
305}
Junio C Hamano7d06a8a2008-10-20 05:42:33306
Junio C Hamano7bd050f2011-09-22 06:32:22307.footnote, .footnoteref {
308 font-size: 0.8em;
309}
310
311span.footnote, span.footnoteref {
312 vertical-align: super;
313}
314
315#footnotes {
316 margin: 20px 0 20px 0;
317 padding: 7px 0 0 0;
318}
319
320#footnotes div.footnote {
321 margin: 0 0 5px 0;
322}
323
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;
332}
333
Junio C Hamano9d971152012-12-19 00:43:11334div.colist td {
335 padding-right: 0.5em;
336 padding-bottom: 0.3em;
337 vertical-align: top;
338}
339div.colist td img {
340 margin-top: 0.3em;
Junio C Hamano7d06a8a2008-10-20 05:42:33341}
342
Junio C Hamano9d971152012-12-19 00:43:11343@media print {
344 #footer-badges { display: none; }
345}
346
347#toc {
Junio C Hamano7bd050f2011-09-22 06:32:22348 margin-bottom: 2.5em;
349}
350
Junio C Hamano9d971152012-12-19 00:43:11351#toctitle {
Junio C Hamano7d06a8a2008-10-20 05:42:33352 color: #527bbd;
Junio C Hamano7d06a8a2008-10-20 05:42:33353 font-size: 1.1em;
354 font-weight: bold;
355 margin-top: 1.0em;
356 margin-bottom: 0.1em;
357}
358
Junio C Hamanoc14e6ad2014-10-31 20:25:53359div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
Junio C Hamano7d06a8a2008-10-20 05:42:33360 margin-top: 0;
361 margin-bottom: 0;
362}
363div.toclevel2 {
364 margin-left: 2em;
365 font-size: 0.9em;
366}
367div.toclevel3 {
368 margin-left: 4em;
369 font-size: 0.9em;
370}
371div.toclevel4 {
372 margin-left: 6em;
373 font-size: 0.9em;
374}
Junio C Hamano9d971152012-12-19 00:43:11375
376span.aqua { color: aqua; }
377span.black { color: black; }
378span.blue { color: blue; }
379span.fuchsia { color: fuchsia; }
380span.gray { color: gray; }
381span.green { color: green; }
382span.lime { color: lime; }
383span.maroon { color: maroon; }
384span.navy { color: navy; }
385span.olive { color: olive; }
386span.purple { color: purple; }
387span.red { color: red; }
388span.silver { color: silver; }
389span.teal { color: teal; }
390span.white { color: white; }
391span.yellow { color: yellow; }
392
393span.aqua-background { background: aqua; }
394span.black-background { background: black; }
395span.blue-background { background: blue; }
396span.fuchsia-background { background: fuchsia; }
397span.gray-background { background: gray; }
398span.green-background { background: green; }
399span.lime-background { background: lime; }
400span.maroon-background { background: maroon; }
401span.navy-background { background: navy; }
402span.olive-background { background: olive; }
403span.purple-background { background: purple; }
404span.red-background { background: red; }
405span.silver-background { background: silver; }
406span.teal-background { background: teal; }
407span.white-background { background: white; }
408span.yellow-background { background: yellow; }
409
410span.big { font-size: 2em; }
411span.small { font-size: 0.6em; }
412
413span.underline { text-decoration: underline; }
414span.overline { text-decoration: overline; }
415span.line-through { text-decoration: line-through; }
416
Junio C Hamanoc14e6ad2014-10-31 20:25:53417div.unbreakable { page-break-inside: avoid; }
418
Junio C Hamano9d971152012-12-19 00:43:11419
420/*
421 * xhtml11 specific
422 *
423 * */
424
425div.tableblock {
426 margin-top: 1.0em;
427 margin-bottom: 1.5em;
428}
429div.tableblock > table {
430 border: 3px solid #527bbd;
431}
432thead, p.table.header {
433 font-weight: bold;
434 color: #527bbd;
435}
436p.table {
437 margin-top: 0;
438}
Junio C Hamano725b0da2020-01-22 22:02:40439/* Because the table frame attribute is overridden by CSS in most browsers. */
Junio C Hamano9d971152012-12-19 00:43:11440div.tableblock > table[frame="void"] {
441 border-style: none;
442}
443div.tableblock > table[frame="hsides"] {
444 border-left-style: none;
445 border-right-style: none;
446}
447div.tableblock > table[frame="vsides"] {
448 border-top-style: none;
449 border-bottom-style: none;
450}
451
452
453/*
454 * html5 specific
455 *
456 * */
457
458table.tableblock {
459 margin-top: 1.0em;
460 margin-bottom: 1.5em;
461}
462thead, p.tableblock.header {
463 font-weight: bold;
464 color: #527bbd;
465}
466p.tableblock {
467 margin-top: 0;
468}
469table.tableblock {
470 border-width: 3px;
471 border-spacing: 0px;
472 border-style: solid;
473 border-color: #527bbd;
474 border-collapse: collapse;
475}
476th.tableblock, td.tableblock {
477 border-width: 1px;
478 padding: 4px;
479 border-style: solid;
480 border-color: #527bbd;
481}
482
483table.tableblock.frame-topbot {
484 border-left-style: hidden;
485 border-right-style: hidden;
486}
487table.tableblock.frame-sides {
488 border-top-style: hidden;
489 border-bottom-style: hidden;
490}
491table.tableblock.frame-none {
492 border-style: hidden;
493}
494
495th.tableblock.halign-left, td.tableblock.halign-left {
496 text-align: left;
497}
498th.tableblock.halign-center, td.tableblock.halign-center {
499 text-align: center;
500}
501th.tableblock.halign-right, td.tableblock.halign-right {
502 text-align: right;
503}
504
505th.tableblock.valign-top, td.tableblock.valign-top {
506 vertical-align: top;
507}
508th.tableblock.valign-middle, td.tableblock.valign-middle {
509 vertical-align: middle;
510}
511th.tableblock.valign-bottom, td.tableblock.valign-bottom {
512 vertical-align: bottom;
513}
514
515
516/*
517 * manpage specific
518 *
519 * */
520
521body.manpage h1 {
Junio C Hamano103b5722011-01-31 05:03:45522 padding-top: 0.5em;
523 padding-bottom: 0.5em;
524 border-top: 2px solid silver;
525 border-bottom: 2px solid silver;
526}
Junio C Hamano9d971152012-12-19 00:43:11527body.manpage h2 {
Junio C Hamano103b5722011-01-31 05:03:45528 border-style: none;
529}
Junio C Hamano9d971152012-12-19 00:43:11530body.manpage div.sectionbody {
531 margin-left: 3em;
Junio C Hamano103b5722011-01-31 05:03:45532}
533
534@media print {
Junio C Hamano9d971152012-12-19 00:43:11535 body.manpage div#toc { display: none; }
Junio C Hamano103b5722011-01-31 05:03:45536}
Junio C Hamanoc14e6ad2014-10-31 20:25:53537
538
Junio C Hamano7d06a8a2008-10-20 05:42:33539</style>
Junio C Hamano7bd050f2011-09-22 06:32:22540<script type="text/javascript">
541/*<![CDATA[*/
Junio C Hamano2b153182021-12-15 21:00:31542var asciidoc = { // Namespace.
543
544/////////////////////////////////////////////////////////////////////
545// Table Of Contents generator
546/////////////////////////////////////////////////////////////////////
547
548/* Author: Mihai Bazon, September 2002
549 * http://students.infoiasi.ro/~mishoo
550 *
551 * Table Of Content generator
552 * Version: 0.4
553 *
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.
556 */
557
558 /* modified by Troy D. Hanson, September 2006. License: GPL */
559 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
560
561// toclevels = 1..4.
562toc: function (toclevels) {
563
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);
571 }
572 return text;
573 }
574
575 function TocEntry(el, text, toclevel) {
576 this.element = el;
577 this.text = text;
578 this.toclevel = toclevel;
579 }
580
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);
593 }
594 iterate(i);
595 }
596 }
597 }
598 iterate(el);
599 return result;
600 }
601
602 var toc = document.getElementById("toc");
603 if (!toc) {
604 return;
605 }
606
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);
616 }
617 for (i = 0; i < tocEntriesToRemove.length; i++) {
618 toc.removeChild(tocEntriesToRemove[i]);
619 }
620
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);
634 }
635 if (entries.length == 0)
636 toc.parentNode.removeChild(toc);
637},
638
639
640/////////////////////////////////////////////////////////////////////
641// Footnotes generator
642/////////////////////////////////////////////////////////////////////
643
644/* Based on footnote generation code from:
645 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
646 */
647
648footnotes: 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;
654 }
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);
660 }
661 for (i = 0; i < entriesToRemove.length; i++) {
662 noteholder.removeChild(entriesToRemove[i]);
663 }
664
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);
682 }
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;
689 }
690 }
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>]";
703 }
704 }
705 }
706},
707
708install: function(toclevels) {
709 var timerId;
710
711 function reinstall() {
712 asciidoc.footnotes();
713 if (toclevels) {
714 asciidoc.toc(toclevels);
715 }
716 }
717
718 function reinstallAndRemoveTimer() {
719 clearInterval(timerId);
720 reinstall();
721 }
722
723 timerId = setInterval(reinstall, 500);
724 if (document.addEventListener)
725 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
726 else
727 window.onload = reinstallAndRemoveTimer;
728}
729
730}
Junio C Hamano9d971152012-12-19 00:43:11731asciidoc.install();
Junio C Hamano7bd050f2011-09-22 06:32:22732/*]]>*/
733</script>
Junio C Hamano7d06a8a2008-10-20 05:42:33734</head>
Junio C Hamano9d971152012-12-19 00:43:11735<body class="manpage">
Junio C Hamano7d06a8a2008-10-20 05:42:33736<div id="header">
737<h1>
738gitworkflows(7) Manual Page
739</h1>
740<h2>NAME</h2>
741<div class="sectionbody">
742<p>gitworkflows -
Junio C Hamano076ffcc2013-02-06 05:13:21743 An overview of recommended workflows with Git
Junio C Hamano7d06a8a2008-10-20 05:42:33744</p>
745</div>
746</div>
Junio C Hamano7bd050f2011-09-22 06:32:22747<div id="content">
Junio C Hamano9d971152012-12-19 00:43:11748<div class="sect1">
Junio C Hamano103b5722011-01-31 05:03:45749<h2 id="_synopsis">SYNOPSIS</h2>
Junio C Hamano7d06a8a2008-10-20 05:42:33750<div class="sectionbody">
Junio C Hamano15567bc2011-07-23 00:51:59751<div class="verseblock">
Junio C Hamano9d971152012-12-19 00:43:11752<pre class="content">git *</pre>
753<div class="attribution">
Junio C Hamano15567bc2011-07-23 00:51:59754</div></div>
Junio C Hamano7d06a8a2008-10-20 05:42:33755</div>
Junio C Hamano9d971152012-12-19 00:43:11756</div>
757<div class="sect1">
Junio C Hamano7d06a8a2008-10-20 05:42:33758<h2 id="_description">DESCRIPTION</h2>
759<div class="sectionbody">
Junio C Hamano103b5722011-01-31 05:03:45760<div class="paragraph"><p>This document attempts to write down and motivate some of the workflow
Junio C Hamanoc14e6ad2014-10-31 20:25:53761elements used for <code>git.git</code> itself. Many ideas apply in general,
Junio C Hamano7d06a8a2008-10-20 05:42:33762though the full workflow is rarely required for smaller projects with
763fewer people involved.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45764<div class="paragraph"><p>We formulate a set of <em>rules</em> for quick reference, while the prose
Junio C Hamano7d06a8a2008-10-20 05:42:33765tries to motivate each of them. Do not always take them literally;
766you should value good reasons for your actions higher than manpages
767such as this one.</p></div>
768</div>
Junio C Hamano9d971152012-12-19 00:43:11769</div>
770<div class="sect1">
Junio C Hamano7d06a8a2008-10-20 05:42:33771<h2 id="_separate_changes">SEPARATE CHANGES</h2>
772<div class="sectionbody">
Junio C Hamano103b5722011-01-31 05:03:45773<div class="paragraph"><p>As a general rule, you should try to split your changes into small
Junio C Hamano7d06a8a2008-10-20 05:42:33774logical steps, and commit each of them. They should be consistent,
775working independently of any later commits, pass the test suite, etc.
776This makes the review process much easier, and the history much more
777useful for later inspection and analysis, for example with
Junio C Hamanoa28a9202012-06-21 07:08:23778<a href="git-blame.html">git-blame(1)</a> and <a href="git-bisect.html">git-bisect(1)</a>.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45779<div class="paragraph"><p>To achieve this, try to split your work into small steps from the very
Junio C Hamano7d06a8a2008-10-20 05:42:33780beginning. It is always easier to squash a few commits together than
Junio C Hamano103b5722011-01-31 05:03:45781to split one big commit into several. Don&#8217;t be afraid of making too
Junio C Hamano7d06a8a2008-10-20 05:42:33782small or imperfect steps along the way. You can always go back later
Junio C Hamanoc14e6ad2014-10-31 20:25:53783and edit the commits with <code>git rebase --interactive</code> before you
Junio C Hamano3a9c0342017-11-10 06:01:12784publish them. You can use <code>git stash push --keep-index</code> to run the
Junio C Hamano7d06a8a2008-10-20 05:42:33785test suite independent of other uncommitted changes; see the EXAMPLES
Junio C Hamanoa28a9202012-06-21 07:08:23786section of <a href="git-stash.html">git-stash(1)</a>.</p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:33787</div>
Junio C Hamano9d971152012-12-19 00:43:11788</div>
789<div class="sect1">
Junio C Hamano7d06a8a2008-10-20 05:42:33790<h2 id="_managing_branches">MANAGING BRANCHES</h2>
791<div class="sectionbody">
Junio C Hamano103b5722011-01-31 05:03:45792<div class="paragraph"><p>There are two main tools that can be used to include changes from one
Junio C Hamanoa28a9202012-06-21 07:08:23793branch on another: <a href="git-merge.html">git-merge(1)</a> and
794<a href="git-cherry-pick.html">git-cherry-pick(1)</a>.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45795<div class="paragraph"><p>Merges have many advantages, so we try to solve as many problems as
Junio C Hamano7d06a8a2008-10-20 05:42:33796possible with merges alone. Cherry-picking is still occasionally
797useful; see "Merging upwards" below for an example.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45798<div class="paragraph"><p>Most importantly, merging works at the branch level, while
Junio C Hamano7d06a8a2008-10-20 05:42:33799cherry-picking works at the commit level. This means that a merge can
800carry over the changes from 1, 10, or 1000 commits with equal ease,
801which in turn means the workflow scales much better to a large number
802of contributors (and contributions). Merges are also easier to
803understand because a merge commit is a "promise" that all changes from
804all its parents are now included.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45805<div class="paragraph"><p>There is a tradeoff of course: merges require a more careful branch
Junio C Hamano7d06a8a2008-10-20 05:42:33806management. The following subsections discuss the important points.</p></div>
Junio C Hamano9d971152012-12-19 00:43:11807<div class="sect2">
808<h3 id="_graduation">Graduation</h3>
Junio C Hamano103b5722011-01-31 05:03:45809<div class="paragraph"><p>As a given feature goes from experimental to stable, it also
Junio C Hamano7d06a8a2008-10-20 05:42:33810"graduates" between the corresponding branches of the software.
Junio C Hamanoc14e6ad2014-10-31 20:25:53811<code>git.git</code> uses the following <em>integration branches</em>:</p></div>
Junio C Hamano103b5722011-01-31 05:03:45812<div class="ulist"><ul>
Junio C Hamano7d06a8a2008-10-20 05:42:33813<li>
814<p>
815<em>maint</em> tracks the commits that should go into the next "maintenance
816 release", i.e., update of the last released stable version;
817</p>
818</li>
819<li>
820<p>
821<em>master</em> tracks the commits that should go into the next release;
822</p>
823</li>
824<li>
825<p>
826<em>next</em> is intended as a testing branch for topics being tested for
827 stability for master.
828</p>
829</li>
830</ul></div>
Junio C Hamano103b5722011-01-31 05:03:45831<div class="paragraph"><p>There is a fourth official branch that is used slightly differently:</p></div>
832<div class="ulist"><ul>
Junio C Hamano7d06a8a2008-10-20 05:42:33833<li>
834<p>
Junio C Hamanoa8911782020-07-07 05:35:57835<em>seen</em> (patches seen by the maintainer) is an integration branch for
836 things that are not quite ready for inclusion yet (see "Integration
837 Branches" below).
Junio C Hamano7d06a8a2008-10-20 05:42:33838</p>
839</li>
840</ul></div>
Junio C Hamano103b5722011-01-31 05:03:45841<div class="paragraph"><p>Each of the four branches is usually a direct descendant of the one
Junio C Hamano7d06a8a2008-10-20 05:42:33842above it.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45843<div class="paragraph"><p>Conceptually, the feature enters at an unstable branch (usually <em>next</em>
Junio C Hamanoa8911782020-07-07 05:35:57844or <em>seen</em>), and "graduates" to <em>master</em> for the next release once it is
Junio C Hamano7d06a8a2008-10-20 05:42:33845considered stable enough.</p></div>
Junio C Hamano9d971152012-12-19 00:43:11846</div>
847<div class="sect2">
848<h3 id="_merging_upwards">Merging upwards</h3>
Junio C Hamano103b5722011-01-31 05:03:45849<div class="paragraph"><p>The "downwards graduation" discussed above cannot be done by actually
Junio C Hamano7d06a8a2008-10-20 05:42:33850merging downwards, however, since that would merge <em>all</em> changes on
851the unstable branch into the stable one. Hence the following:</p></div>
852<div class="exampleblock">
853<div class="title">Rule: Merge upwards</div>
Junio C Hamano9d971152012-12-19 00:43:11854<div class="content">
Junio C Hamano14e66832018-06-18 18:32:19855<div class="paragraph"><p>Always commit your fixes to the oldest supported branch that requires
Junio C Hamano7d06a8a2008-10-20 05:42:33856them. Then (periodically) merge the integration branches upwards into each
857other.</p></div>
858</div></div>
Junio C Hamano103b5722011-01-31 05:03:45859<div class="paragraph"><p>This gives a very controlled flow of fixes. If you notice that you
Junio C Hamano7d06a8a2008-10-20 05:42:33860have applied a fix to e.g. <em>master</em> that is also required in <em>maint</em>,
Junio C Hamanoa28a9202012-06-21 07:08:23861you will need to cherry-pick it (using <a href="git-cherry-pick.html">git-cherry-pick(1)</a>)
Junio C Hamano7d06a8a2008-10-20 05:42:33862downwards. This will happen a few times and is nothing to worry about
863unless you do it very frequently.</p></div>
Junio C Hamano9d971152012-12-19 00:43:11864</div>
865<div class="sect2">
866<h3 id="_topic_branches">Topic branches</h3>
Junio C Hamano103b5722011-01-31 05:03:45867<div class="paragraph"><p>Any nontrivial feature will require several patches to implement, and
Junio C Hamano7d06a8a2008-10-20 05:42:33868may get extra bugfixes or improvements during its lifetime.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45869<div class="paragraph"><p>Committing everything directly on the integration branches leads to many
Junio C Hamano7d06a8a2008-10-20 05:42:33870problems: Bad commits cannot be undone, so they must be reverted one
871by one, which creates confusing histories and further error potential
872when you forget to revert part of a group of changes. Working in
873parallel mixes up the changes, creating further confusion.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45874<div class="paragraph"><p>Use of "topic branches" solves these problems. The name is pretty
Junio C Hamano7d06a8a2008-10-20 05:42:33875self explanatory, with a caveat that comes from the "merge upwards"
876rule above:</p></div>
877<div class="exampleblock">
878<div class="title">Rule: Topic branches</div>
Junio C Hamano9d971152012-12-19 00:43:11879<div class="content">
Junio C Hamano103b5722011-01-31 05:03:45880<div class="paragraph"><p>Make a side branch for every topic (feature, bugfix, &#8230;). Fork it off
Junio C Hamano7d06a8a2008-10-20 05:42:33881at the oldest integration branch that you will eventually want to merge it
882into.</p></div>
883</div></div>
Junio C Hamano103b5722011-01-31 05:03:45884<div class="paragraph"><p>Many things can then be done very naturally:</p></div>
885<div class="ulist"><ul>
Junio C Hamano7d06a8a2008-10-20 05:42:33886<li>
887<p>
888To get the feature/bugfix into an integration branch, simply merge
889 it. If the topic has evolved further in the meantime, merge again.
890 (Note that you do not necessarily have to merge it to the oldest
891 integration branch first. For example, you can first merge a bugfix
892 to <em>next</em>, give it some testing time, and merge to <em>maint</em> when you
893 know it is stable.)
894</p>
895</li>
896<li>
897<p>
898If you find you need new features from the branch <em>other</em> to continue
899 working on your topic, merge <em>other</em> to <em>topic</em>. (However, do not
900 do this "just habitually", see below.)
901</p>
902</li>
903<li>
904<p>
905If you find you forked off the wrong branch and want to move it
Junio C Hamanoa28a9202012-06-21 07:08:23906 "back in time", use <a href="git-rebase.html">git-rebase(1)</a>.
Junio C Hamano7d06a8a2008-10-20 05:42:33907</p>
908</li>
909</ul></div>
Junio C Hamano103b5722011-01-31 05:03:45910<div class="paragraph"><p>Note that the last point clashes with the other two: a topic that has
Junio C Hamano7d06a8a2008-10-20 05:42:33911been merged elsewhere should not be rebased. See the section on
Junio C Hamanoa28a9202012-06-21 07:08:23912RECOVERING FROM UPSTREAM REBASE in <a href="git-rebase.html">git-rebase(1)</a>.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45913<div class="paragraph"><p>We should point out that "habitually" (regularly for no real reason)
914merging an integration branch into your topics&#8201;&#8212;&#8201;and by extension,
915merging anything upstream into anything downstream on a regular basis&#8201;&#8212;&#8201;is frowned upon:</p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:33916<div class="exampleblock">
917<div class="title">Rule: Merge to downstream only at well-defined points</div>
Junio C Hamano9d971152012-12-19 00:43:11918<div class="content">
Junio C Hamano103b5722011-01-31 05:03:45919<div class="paragraph"><p>Do not merge to downstream except with a good reason: upstream API
Junio C Hamano7d06a8a2008-10-20 05:42:33920changes affect your branch; your branch no longer merges to upstream
921cleanly; etc.</p></div>
922</div></div>
Junio C Hamano103b5722011-01-31 05:03:45923<div class="paragraph"><p>Otherwise, the topic that was merged to suddenly contains more than a
Junio C Hamano7d06a8a2008-10-20 05:42:33924single (well-separated) change. The many resulting small merges will
925greatly clutter up history. Anyone who later investigates the history
926of a file will have to find out whether that merge affected the topic
927in development. An upstream might even inadvertently be merged into a
928"more stable" branch. And so on.</p></div>
Junio C Hamano9d971152012-12-19 00:43:11929</div>
930<div class="sect2">
931<h3 id="_throw_away_integration">Throw-away integration</h3>
Junio C Hamano103b5722011-01-31 05:03:45932<div class="paragraph"><p>If you followed the last paragraph, you will now have many small topic
Junio C Hamano7d06a8a2008-10-20 05:42:33933branches, and occasionally wonder how they interact. Perhaps the
934result of merging them does not even work? But on the other hand, we
935want to avoid merging them anywhere "stable" because such merges
936cannot easily be undone.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45937<div class="paragraph"><p>The solution, of course, is to make a merge that we can undo: merge
Junio C Hamano7d06a8a2008-10-20 05:42:33938into a throw-away branch.</p></div>
939<div class="exampleblock">
940<div class="title">Rule: Throw-away integration branches</div>
Junio C Hamano9d971152012-12-19 00:43:11941<div class="content">
Junio C Hamano103b5722011-01-31 05:03:45942<div class="paragraph"><p>To test the interaction of several topics, merge them into a
Junio C Hamano7d06a8a2008-10-20 05:42:33943throw-away branch. You must never base any work on such a branch!</p></div>
944</div></div>
Junio C Hamano103b5722011-01-31 05:03:45945<div class="paragraph"><p>If you make it (very) clear that this branch is going to be deleted
Junio C Hamano7d06a8a2008-10-20 05:42:33946right after the testing, you can even publish this branch, for example
947to give the testers a chance to work with it, or other developers a
Junio C Hamanoc14e6ad2014-10-31 20:25:53948chance to see if their in-progress work will be compatible. <code>git.git</code>
Junio C Hamanoa8911782020-07-07 05:35:57949has such an official throw-away integration branch called <em>seen</em>.</p></div>
Junio C Hamano9d971152012-12-19 00:43:11950</div>
951<div class="sect2">
952<h3 id="_branch_management_for_a_release">Branch management for a release</h3>
Junio C Hamano103b5722011-01-31 05:03:45953<div class="paragraph"><p>Assuming you are using the merge approach discussed above, when you
Junio C Hamano3b70d3c2009-11-21 17:37:37954are releasing your project you will need to do some additional branch
955management work.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45956<div class="paragraph"><p>A feature release is created from the <em>master</em> branch, since <em>master</em>
Junio C Hamano3b70d3c2009-11-21 17:37:37957tracks the commits that should go into the next feature release.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45958<div class="paragraph"><p>The <em>master</em> branch is supposed to be a superset of <em>maint</em>. If this
Junio C Hamano3b70d3c2009-11-21 17:37:37959condition does not hold, then <em>maint</em> contains some commits that
960are not included on <em>master</em>. The fixes represented by those commits
961will therefore not be included in your feature release.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45962<div class="paragraph"><p>To verify that <em>master</em> is indeed a superset of <em>maint</em>, use git log:</p></div>
Junio C Hamano3b70d3c2009-11-21 17:37:37963<div class="exampleblock">
964<div class="title">Recipe: Verify <em>master</em> is a superset of <em>maint</em></div>
Junio C Hamano9d971152012-12-19 00:43:11965<div class="content">
Junio C Hamanoc14e6ad2014-10-31 20:25:53966<div class="paragraph"><p><code>git log master..maint</code></p></div>
Junio C Hamano3b70d3c2009-11-21 17:37:37967</div></div>
Junio C Hamano103b5722011-01-31 05:03:45968<div class="paragraph"><p>This command should not list any commits. Otherwise, check out
Junio C Hamano3b70d3c2009-11-21 17:37:37969<em>master</em> and merge <em>maint</em> into it.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45970<div class="paragraph"><p>Now you can proceed with the creation of the feature release. Apply a
Junio C Hamano3b70d3c2009-11-21 17:37:37971tag to the tip of <em>master</em> indicating the release version:</p></div>
972<div class="exampleblock">
973<div class="title">Recipe: Release tagging</div>
Junio C Hamano9d971152012-12-19 00:43:11974<div class="content">
Junio C Hamanoc14e6ad2014-10-31 20:25:53975<div class="paragraph"><p><code>git tag -s -m "Git X.Y.Z" vX.Y.Z master</code></p></div>
Junio C Hamano3b70d3c2009-11-21 17:37:37976</div></div>
Junio C Hamano076ffcc2013-02-06 05:13:21977<div class="paragraph"><p>You need to push the new tag to a public Git server (see
Junio C Hamano3b70d3c2009-11-21 17:37:37978"DISTRIBUTED WORKFLOWS" below). This makes the tag available to
979others tracking your project. The push could also trigger a
980post-update hook to perform release-related items such as building
981release tarballs and preformatted documentation pages.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45982<div class="paragraph"><p>Similarly, for a maintenance release, <em>maint</em> is tracking the commits
Junio C Hamano3b70d3c2009-11-21 17:37:37983to be released. Therefore, in the steps above simply tag and push
984<em>maint</em> rather than <em>master</em>.</p></div>
Junio C Hamano9d971152012-12-19 00:43:11985</div>
986<div class="sect2">
987<h3 id="_maintenance_branch_management_after_a_feature_release">Maintenance branch management after a feature release</h3>
Junio C Hamano103b5722011-01-31 05:03:45988<div class="paragraph"><p>After a feature release, you need to manage your maintenance branches.</p></div>
989<div class="paragraph"><p>First, if you wish to continue to release maintenance fixes for the
Junio C Hamano3b70d3c2009-11-21 17:37:37990feature release made before the recent one, then you must create
991another branch to track commits for that previous release.</p></div>
Junio C Hamano103b5722011-01-31 05:03:45992<div class="paragraph"><p>To do this, the current maintenance branch is copied to another branch
Junio C Hamano3b70d3c2009-11-21 17:37:37993named with the previous release version number (e.g. maint-X.Y.(Z-1)
994where X.Y.Z is the current release).</p></div>
995<div class="exampleblock">
996<div class="title">Recipe: Copy maint</div>
Junio C Hamano9d971152012-12-19 00:43:11997<div class="content">
Junio C Hamanoc14e6ad2014-10-31 20:25:53998<div class="paragraph"><p><code>git branch maint-X.Y.(Z-1) maint</code></p></div>
Junio C Hamano3b70d3c2009-11-21 17:37:37999</div></div>
Junio C Hamano103b5722011-01-31 05:03:451000<div class="paragraph"><p>The <em>maint</em> branch should now be fast-forwarded to the newly released
Junio C Hamano3b70d3c2009-11-21 17:37:371001code so that maintenance fixes can be tracked for the current release:</p></div>
1002<div class="exampleblock">
1003<div class="title">Recipe: Update maint to new release</div>
Junio C Hamano9d971152012-12-19 00:43:111004<div class="content">
Junio C Hamano103b5722011-01-31 05:03:451005<div class="ulist"><ul>
Junio C Hamano3b70d3c2009-11-21 17:37:371006<li>
1007<p>
Junio C Hamanoc14e6ad2014-10-31 20:25:531008<code>git checkout maint</code>
Junio C Hamano3b70d3c2009-11-21 17:37:371009</p>
1010</li>
1011<li>
1012<p>
Junio C Hamanoc14e6ad2014-10-31 20:25:531013<code>git merge --ff-only master</code>
Junio C Hamano3b70d3c2009-11-21 17:37:371014</p>
1015</li>
1016</ul></div>
1017</div></div>
Junio C Hamano103b5722011-01-31 05:03:451018<div class="paragraph"><p>If the merge fails because it is not a fast-forward, then it is
Junio C Hamano3b70d3c2009-11-21 17:37:371019possible some fixes on <em>maint</em> were missed in the feature release.
1020This will not happen if the content of the branches was verified as
1021described in the previous section.</p></div>
Junio C Hamano9d971152012-12-19 00:43:111022</div>
1023<div class="sect2">
Junio C Hamanoa8911782020-07-07 05:35:571024<h3 id="_branch_management_for_next_and_seen_after_a_feature_release">Branch management for next and seen after a feature release</h3>
Junio C Hamano103b5722011-01-31 05:03:451025<div class="paragraph"><p>After a feature release, the integration branch <em>next</em> may optionally be
Junio C Hamano3b70d3c2009-11-21 17:37:371026rewound and rebuilt from the tip of <em>master</em> using the surviving
1027topics on <em>next</em>:</p></div>
1028<div class="exampleblock">
1029<div class="title">Recipe: Rewind and rebuild next</div>
Junio C Hamano9d971152012-12-19 00:43:111030<div class="content">
Junio C Hamano103b5722011-01-31 05:03:451031<div class="ulist"><ul>
Junio C Hamano3b70d3c2009-11-21 17:37:371032<li>
1033<p>
Junio C Hamanoc9f11c22019-07-10 02:54:041034<code>git switch -C next master</code>
Junio C Hamano3b70d3c2009-11-21 17:37:371035</p>
1036</li>
1037<li>
1038<p>
Junio C Hamanoc14e6ad2014-10-31 20:25:531039<code>git merge ai/topic_in_next1</code>
Junio C Hamano3b70d3c2009-11-21 17:37:371040</p>
1041</li>
1042<li>
1043<p>
Junio C Hamanoc14e6ad2014-10-31 20:25:531044<code>git merge ai/topic_in_next2</code>
Junio C Hamano3b70d3c2009-11-21 17:37:371045</p>
1046</li>
1047<li>
1048<p>
1049&#8230;
1050</p>
1051</li>
1052</ul></div>
1053</div></div>
Junio C Hamano103b5722011-01-31 05:03:451054<div class="paragraph"><p>The advantage of doing this is that the history of <em>next</em> will be
Junio C Hamano3b70d3c2009-11-21 17:37:371055clean. For example, some topics merged into <em>next</em> may have initially
1056looked promising, but were later found to be undesirable or premature.
1057In such a case, the topic is reverted out of <em>next</em> but the fact
1058remains in the history that it was once merged and reverted. By
1059recreating <em>next</em>, you give another incarnation of such topics a clean
1060slate to retry, and a feature release is a good point in history to do
1061so.</p></div>
Junio C Hamano103b5722011-01-31 05:03:451062<div class="paragraph"><p>If you do this, then you should make a public announcement indicating
Junio C Hamano3b70d3c2009-11-21 17:37:371063that <em>next</em> was rewound and rebuilt.</p></div>
Junio C Hamanoa8911782020-07-07 05:35:571064<div class="paragraph"><p>The same rewind and rebuild process may be followed for <em>seen</em>. A public
1065announcement is not necessary since <em>seen</em> is a throw-away branch, as
Junio C Hamano3b70d3c2009-11-21 17:37:371066described above.</p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331067</div>
Junio C Hamano9d971152012-12-19 00:43:111068</div>
1069</div>
1070<div class="sect1">
Junio C Hamano7d06a8a2008-10-20 05:42:331071<h2 id="_distributed_workflows">DISTRIBUTED WORKFLOWS</h2>
1072<div class="sectionbody">
Junio C Hamano103b5722011-01-31 05:03:451073<div class="paragraph"><p>After the last section, you should know how to manage topics. In
Junio C Hamano7d06a8a2008-10-20 05:42:331074general, you will not be the only person working on the project, so
1075you will have to share your work.</p></div>
Junio C Hamano103b5722011-01-31 05:03:451076<div class="paragraph"><p>Roughly speaking, there are two important workflows: merge and patch.
Junio C Hamano7d06a8a2008-10-20 05:42:331077The important difference is that the merge workflow can propagate full
1078history, including merges, while patches cannot. Both workflows can
Junio C Hamanoc14e6ad2014-10-31 20:25:531079be used in parallel: in <code>git.git</code>, only subsystem maintainers use
Junio C Hamano7d06a8a2008-10-20 05:42:331080the merge workflow, while everyone else sends patches.</p></div>
Junio C Hamano103b5722011-01-31 05:03:451081<div class="paragraph"><p>Note that the maintainer(s) may impose restrictions, such as
Junio C Hamano7d06a8a2008-10-20 05:42:331082"Signed-off-by" requirements, that all commits/patches submitted for
Junio C Hamano103b5722011-01-31 05:03:451083inclusion must adhere to. Consult your project&#8217;s documentation for
Junio C Hamano7d06a8a2008-10-20 05:42:331084more information.</p></div>
Junio C Hamano9d971152012-12-19 00:43:111085<div class="sect2">
1086<h3 id="_merge_workflow">Merge workflow</h3>
Junio C Hamano103b5722011-01-31 05:03:451087<div class="paragraph"><p>The merge workflow works by copying branches between upstream and
Junio C Hamano7d06a8a2008-10-20 05:42:331088downstream. Upstream can merge contributions into the official
1089history; downstream base their work on the official history.</p></div>
Junio C Hamano103b5722011-01-31 05:03:451090<div class="paragraph"><p>There are three main tools that can be used for this:</p></div>
1091<div class="ulist"><ul>
Junio C Hamano7d06a8a2008-10-20 05:42:331092<li>
1093<p>
Junio C Hamanoa28a9202012-06-21 07:08:231094<a href="git-push.html">git-push(1)</a> copies your branches to a remote repository,
Junio C Hamano7d06a8a2008-10-20 05:42:331095 usually to one that can be read by all involved parties;
1096</p>
1097</li>
1098<li>
1099<p>
Junio C Hamanoa28a9202012-06-21 07:08:231100<a href="git-fetch.html">git-fetch(1)</a> that copies remote branches to your repository;
Junio C Hamano7d06a8a2008-10-20 05:42:331101 and
1102</p>
1103</li>
1104<li>
1105<p>
Junio C Hamanoa28a9202012-06-21 07:08:231106<a href="git-pull.html">git-pull(1)</a> that does fetch and merge in one go.
Junio C Hamano7d06a8a2008-10-20 05:42:331107</p>
1108</li>
1109</ul></div>
Junio C Hamano103b5722011-01-31 05:03:451110<div class="paragraph"><p>Note the last point. Do <em>not</em> use <em>git pull</em> unless you actually want
Junio C Hamano7d06a8a2008-10-20 05:42:331111to merge the remote branch.</p></div>
Junio C Hamano103b5722011-01-31 05:03:451112<div class="paragraph"><p>Getting changes out is easy:</p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331113<div class="exampleblock">
1114<div class="title">Recipe: Push/pull: Publishing branches/topics</div>
Junio C Hamano9d971152012-12-19 00:43:111115<div class="content">
Junio C Hamanoc14e6ad2014-10-31 20:25:531116<div class="paragraph"><p><code>git push &lt;remote&gt; &lt;branch&gt;</code> and tell everyone where they can fetch
Junio C Hamano7d06a8a2008-10-20 05:42:331117from.</p></div>
1118</div></div>
Junio C Hamano103b5722011-01-31 05:03:451119<div class="paragraph"><p>You will still have to tell people by other means, such as mail. (Git
Junio C Hamanoa28a9202012-06-21 07:08:231120provides the <a href="git-request-pull.html">git-request-pull(1)</a> to send preformatted pull
Junio C Hamano7d06a8a2008-10-20 05:42:331121requests to upstream maintainers to simplify this task.)</p></div>
Junio C Hamano103b5722011-01-31 05:03:451122<div class="paragraph"><p>If you just want to get the newest copies of the integration branches,
Junio C Hamano7d06a8a2008-10-20 05:42:331123staying up to date is easy too:</p></div>
1124<div class="exampleblock">
1125<div class="title">Recipe: Push/pull: Staying up to date</div>
Junio C Hamano9d971152012-12-19 00:43:111126<div class="content">
Junio C Hamanoc14e6ad2014-10-31 20:25:531127<div class="paragraph"><p>Use <code>git fetch &lt;remote&gt;</code> or <code>git remote update</code> to stay up to date.</p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331128</div></div>
Junio C Hamano103b5722011-01-31 05:03:451129<div class="paragraph"><p>Then simply fork your topic branches from the stable remotes as
Junio C Hamano7d06a8a2008-10-20 05:42:331130explained earlier.</p></div>
Junio C Hamano103b5722011-01-31 05:03:451131<div class="paragraph"><p>If you are a maintainer and would like to merge other people&#8217;s topic
Junio C Hamano7d06a8a2008-10-20 05:42:331132branches to the integration branches, they will typically send a
1133request to do so by mail. Such a request looks like</p></div>
1134<div class="listingblock">
1135<div class="content">
Junio C Hamanoc14e6ad2014-10-31 20:25:531136<pre><code>Please pull from
Junio C Hamano59a32b02021-12-10 22:53:381137 &lt;URL&gt; &lt;branch&gt;</code></pre>
Junio C Hamano7d06a8a2008-10-20 05:42:331138</div></div>
Junio C Hamano103b5722011-01-31 05:03:451139<div class="paragraph"><p>In that case, <em>git pull</em> can do the fetch and merge in one go, as
Junio C Hamano7d06a8a2008-10-20 05:42:331140follows.</p></div>
1141<div class="exampleblock">
1142<div class="title">Recipe: Push/pull: Merging remote topics</div>
Junio C Hamano9d971152012-12-19 00:43:111143<div class="content">
Junio C Hamano59a32b02021-12-10 22:53:381144<div class="paragraph"><p><code>git pull &lt;URL&gt; &lt;branch&gt;</code></p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331145</div></div>
Junio C Hamano0f1291d2017-12-27 19:58:351146<div class="paragraph"><p>Occasionally, the maintainer may get merge conflicts when they try to
1147pull changes from downstream. In this case, they can ask downstream to
Junio C Hamano7d06a8a2008-10-20 05:42:331148do the merge and resolve the conflicts themselves (perhaps they will
1149know better how to resolve them). It is one of the rare cases where
1150downstream <em>should</em> merge from upstream.</p></div>
Junio C Hamano9d971152012-12-19 00:43:111151</div>
1152<div class="sect2">
1153<h3 id="_patch_workflow">Patch workflow</h3>
Junio C Hamano103b5722011-01-31 05:03:451154<div class="paragraph"><p>If you are a contributor that sends changes upstream in the form of
Junio C Hamano7d06a8a2008-10-20 05:42:331155emails, you should use topic branches as usual (see above). Then use
Junio C Hamanoa28a9202012-06-21 07:08:231156<a href="git-format-patch.html">git-format-patch(1)</a> to generate the corresponding emails
Junio C Hamano7d06a8a2008-10-20 05:42:331157(highly recommended over manually formatting them because it makes the
Junio C Hamano103b5722011-01-31 05:03:451158maintainer&#8217;s life easier).</p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331159<div class="exampleblock">
1160<div class="title">Recipe: format-patch/am: Publishing branches/topics</div>
Junio C Hamano9d971152012-12-19 00:43:111161<div class="content">
Junio C Hamano103b5722011-01-31 05:03:451162<div class="ulist"><ul>
Junio C Hamano7d06a8a2008-10-20 05:42:331163<li>
1164<p>
Junio C Hamanoc14e6ad2014-10-31 20:25:531165<code>git format-patch -M upstream..topic</code> to turn them into preformatted
Junio C Hamano7d06a8a2008-10-20 05:42:331166 patch files
1167</p>
1168</li>
1169<li>
1170<p>
Junio C Hamanoc14e6ad2014-10-31 20:25:531171<code>git send-email --to=&lt;recipient&gt; &lt;patches&gt;</code>
Junio C Hamano7d06a8a2008-10-20 05:42:331172</p>
1173</li>
1174</ul></div>
1175</div></div>
Junio C Hamanoa28a9202012-06-21 07:08:231176<div class="paragraph"><p>See the <a href="git-format-patch.html">git-format-patch(1)</a> and <a href="git-send-email.html">git-send-email(1)</a>
Junio C Hamano7d06a8a2008-10-20 05:42:331177manpages for further usage notes.</p></div>
Junio C Hamano103b5722011-01-31 05:03:451178<div class="paragraph"><p>If the maintainer tells you that your patch no longer applies to the
Junio C Hamano7d06a8a2008-10-20 05:42:331179current upstream, you will have to rebase your topic (you cannot use a
1180merge because you cannot format-patch merges):</p></div>
1181<div class="exampleblock">
1182<div class="title">Recipe: format-patch/am: Keeping topics up to date</div>
Junio C Hamano9d971152012-12-19 00:43:111183<div class="content">
Junio C Hamano59a32b02021-12-10 22:53:381184<div class="paragraph"><p><code>git pull --rebase &lt;URL&gt; &lt;branch&gt;</code></p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331185</div></div>
Junio C Hamano103b5722011-01-31 05:03:451186<div class="paragraph"><p>You can then fix the conflicts during the rebase. Presumably you have
Junio C Hamano7d06a8a2008-10-20 05:42:331187not published your topic other than by mail, so rebasing it is not a
1188problem.</p></div>
Junio C Hamano103b5722011-01-31 05:03:451189<div class="paragraph"><p>If you receive such a patch series (as maintainer, or perhaps as a
Junio C Hamano7d06a8a2008-10-20 05:42:331190reader of the mailing list it was sent to), save the mails to files,
Junio C Hamano1aa40d22010-01-21 17:46:431191create a new topic branch and use <em>git am</em> to import the commits:</p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331192<div class="exampleblock">
1193<div class="title">Recipe: format-patch/am: Importing patches</div>
Junio C Hamano9d971152012-12-19 00:43:111194<div class="content">
Junio C Hamanoc14e6ad2014-10-31 20:25:531195<div class="paragraph"><p><code>git am &lt; patch</code></p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331196</div></div>
Junio C Hamano103b5722011-01-31 05:03:451197<div class="paragraph"><p>One feature worth pointing out is the three-way merge, which can help
Junio C Hamanoc14e6ad2014-10-31 20:25:531198if you get conflicts: <code>git am -3</code> will use index information contained
Junio C Hamanoa28a9202012-06-21 07:08:231199in patches to figure out the merge base. See <a href="git-am.html">git-am(1)</a> for
Junio C Hamano7d06a8a2008-10-20 05:42:331200other options.</p></div>
1201</div>
Junio C Hamano9d971152012-12-19 00:43:111202</div>
1203</div>
1204<div class="sect1">
Junio C Hamano7d06a8a2008-10-20 05:42:331205<h2 id="_see_also">SEE ALSO</h2>
1206<div class="sectionbody">
Junio C Hamanoa28a9202012-06-21 07:08:231207<div class="paragraph"><p><a href="gittutorial.html">gittutorial(7)</a>,
1208<a href="git-push.html">git-push(1)</a>,
1209<a href="git-pull.html">git-pull(1)</a>,
1210<a href="git-merge.html">git-merge(1)</a>,
1211<a href="git-rebase.html">git-rebase(1)</a>,
1212<a href="git-format-patch.html">git-format-patch(1)</a>,
1213<a href="git-send-email.html">git-send-email(1)</a>,
1214<a href="git-am.html">git-am(1)</a></p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331215</div>
Junio C Hamano9d971152012-12-19 00:43:111216</div>
1217<div class="sect1">
Junio C Hamano7d06a8a2008-10-20 05:42:331218<h2 id="_git">GIT</h2>
1219<div class="sectionbody">
Junio C Hamanoe89102f2017-02-15 23:18:151220<div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331221</div>
Junio C Hamano7bd050f2011-09-22 06:32:221222</div>
Junio C Hamano9d971152012-12-19 00:43:111223</div>
Junio C Hamano7bd050f2011-09-22 06:32:221224<div id="footnotes"><hr /></div>
Junio C Hamano7d06a8a2008-10-20 05:42:331225<div id="footer">
1226<div id="footer-text">
Junio C Hamano2ef0ba32018-01-26 23:13:531227Last updated
Junio C Hamanod2309372023-01-16 21:19:041228 2021-12-10 14:52:02 PST
Junio C Hamano7d06a8a2008-10-20 05:42:331229</div>
1230</div>
1231</body>
1232</html>