This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fixed missing word in Text::Wrap POD
[perl5.git] / pod / perlrepository.pod
CommitLineData
0549aefb
LB
1=for comment
2Consistent formatting of this file is achieved with:
3 perl ./Porting/podtidy pod/perlrepository.pod
4
d7dd28b6
LB
5=head1 NAME
6
7perlrepository - Using the Perl source repository
8
9=head1 SYNOPSIS
10
dc3c3040
GA
11All of Perl's source code is kept centrally in a Git repository at
12I<perl5.git.perl.org>. The repository contains many Perl revisions
13from Perl 1 onwards and all the revisions from Perforce, the version
14control system we were using previously. This repository is accessible
15in different ways.
d7dd28b6
LB
16
17The full repository takes up about 80MB of disk space. A check out of
d9847473
RGS
18the blead branch (that is, the master branch, which contains bleadperl,
19the development version of perl 5) takes up about 160MB of disk space
20(including the repository). A build of bleadperl takes up about 200MB
21(including the repository and the check out).
d7dd28b6
LB
22
23=head1 GETTING ACCESS TO THE REPOSITORY
24
25=head2 READ ACCESS VIA THE WEB
26
dc3c3040
GA
27You may access the repository over the web. This allows you to browse
28the tree, see recent commits, subscribe to RSS feeds for the changes,
29search for particular commits and more. You may access it at:
d7dd28b6
LB
30
31 http://perl5.git.perl.org/perl.git
32
dc3c3040
GA
33A mirror of the repository is found at:
34
35 http://github.com/github/perl
36
d7dd28b6
LB
37=head2 READ ACCESS VIA GIT
38
39You will need a copy of Git for your computer. You can fetch a copy of
40the repository using the Git protocol (which uses port 9418):
41
3b8a5fb0 42 git clone git://perl5.git.perl.org/perl.git perl-git
d7dd28b6 43
f755e97d 44This clones the repository and makes a local copy in the F<perl-git>
d7dd28b6
LB
45directory.
46
47If your local network does not allow you to use port 9418, then you can
572f57ba 48fetch a copy of the repository over HTTP (this is slower):
d7dd28b6 49
3b8a5fb0 50 git clone http://perl5.git.perl.org/perl.git perl-http
d7dd28b6 51
f755e97d 52This clones the repository and makes a local copy in the F<perl-http>
d7dd28b6
LB
53directory.
54
55=head2 WRITE ACCESS TO THE REPOSITORY
56
6acba58e
LB
57If you are a committer, then you can fetch a copy of the repository
58that you can push back on with:
d7dd28b6 59
3b8a5fb0 60 git clone ssh://perl5.git.perl.org/gitroot/perl.git perl-ssh
d7dd28b6 61
8f718e95 62This clones the repository and makes a local copy in the F<perl-ssh>
d7dd28b6
LB
63directory.
64
dc3c3040 65If you cloned using the git protocol, which is faster than ssh, then you will need to
6acba58e
LB
66modify your config in order to enable pushing. Edit F<.git/config>
67where you will see something like:
1a0f15d5
YO
68
69 [remote "origin"]
70 url = git://perl5.git.perl.org/perl.git
71
72change that to something like this:
73
74 [remote "origin"]
75 url = ssh://perl5.git.perl.org/gitroot/perl.git
76
dc3c3040
GA
77NOTE: there are symlinks set up so that the /gitroot is optional and
78since SSH is the default protocol you can actually shorten the "url" to
79C<perl5.git.perl.org:/perl.git>.
d7dd28b6 80
184487f0
NC
81You can also set up your user name and e-mail address. For example
82
83 % git config user.name "Leon Brocard"
84 % git config user.email acme@astray.com
85
6acba58e
LB
86It is also possible to keep C<origin> as a git remote, and add a new
87remote for ssh access:
f6c12373 88
dc3c3040 89 % git remote add camel perl5.git.perl.org:/perl.git
f6c12373 90
6acba58e 91This allows you to update your local repository by pulling from
f755e97d 92C<origin>, which is faster and doesn't require you to authenticate, and
6acba58e 93to push your changes back with the C<camel> remote:
f6c12373
VP
94
95 % git fetch camel
96 % git push camel
97
6acba58e
LB
98The C<fetch> command just updates the C<camel> refs, as the objects
99themselves should have been fetched when pulling from C<origin>.
f6c12373 100
d7dd28b6
LB
101=head1 OVERVIEW OF THE REPOSITORY
102
6acba58e
LB
103Once you have changed into the repository directory, you can inspect
104it.
d7dd28b6 105
39219fd3 106After a clone the repository will contain a single local branch, which
50eca761 107will be the current branch as well, as indicated by the asterisk.
39219fd3
YO
108
109 % git branch
110 * blead
111
f755e97d 112Using the -a switch to C<branch> will also show the remote tracking
6acba58e 113branches in the repository:
39219fd3 114
d9847473 115 % git branch -a
09081495 116 * blead
d7dd28b6
LB
117 origin/HEAD
118 origin/blead
119 ...
120
6acba58e
LB
121The branches that begin with "origin" correspond to the "git remote"
122that you cloned from (which is named "origin"). Each branch on the
123remote will be exactly tracked by theses branches. You should NEVER do
124work on these remote tracking branches. You only ever do work in a
125local branch. Local branches can be configured to automerge (on pull)
126from a designated remote tracking branch. This is the case with the
127default branch C<blead> which will be configured to merge from the
128remote tracking branch C<origin/blead>.
39219fd3 129
d7dd28b6
LB
130You can see recent commits:
131
c2cf2042 132 % git log
d7dd28b6 133
6acba58e
LB
134And pull new changes from the repository, and update your local
135repository (must be clean first)
d7dd28b6
LB
136
137 % git pull
09081495 138
6acba58e
LB
139Assuming we are on the branch C<blead> immediately after a pull, this
140command would be more or less equivalent to:
39219fd3
YO
141
142 % git fetch
143 % git merge origin/blead
144
6acba58e
LB
145In fact if you want to update your local repository without touching
146your working directory you do:
39219fd3
YO
147
148 % git fetch
149
6acba58e
LB
150And if you want to update your remote-tracking branches for all defined
151remotes simultaneously you can do
39219fd3
YO
152
153 % git remote update
154
6acba58e
LB
155Neither of these last two commands will update your working directory,
156however both will update the remote-tracking branches in your
157repository.
39219fd3 158
09081495
LB
159To switch to another branch:
160
161 % git checkout origin/maint-5.8-dor
162
6051489b
NC
163To make a local branch of a remote branch:
164
165 % git checkout -b maint-5.10 origin/maint-5.10
166
09081495
LB
167To switch back to blead:
168
169 % git checkout blead
c2cf2042 170
39219fd3
YO
171=head2 FINDING OUT YOUR STATUS
172
173The most common git command you will use will probably be
174
175 % git status
176
6acba58e
LB
177This command will produce as output a description of the current state
178of the repository, including modified files and unignored untracked
179files, and in addition it will show things like what files have been
180staged for the next commit, and usually some useful information about
181how to change things. For instance the following:
39219fd3
YO
182
183 $ git status
184 # On branch blead
185 # Your branch is ahead of 'origin/blead' by 1 commit.
186 #
187 # Changes to be committed:
188 # (use "git reset HEAD <file>..." to unstage)
189 #
190 # modified: pod/perlrepository.pod
191 #
192 # Changed but not updated:
193 # (use "git add <file>..." to update what will be committed)
194 #
195 # modified: pod/perlrepository.pod
196 #
197 # Untracked files:
198 # (use "git add <file>..." to include in what will be committed)
199 #
200 # deliberate.untracked
201
6acba58e
LB
202This shows that there were changes to this document staged for commit,
203and that there were further changes in the working directory not yet
204staged. It also shows that there was an untracked file in the working
205directory, and as you can see shows how to change all of this. It also
0549aefb
LB
206shows that there is one commit on the working branch C<blead> which has
207not been pushed to the C<origin> remote yet. B<NOTE>: that this output
208is also what you see as a template if you do not provide a message to
209C<git commit>.
7f6effc7
YO
210
211Assuming we commit all the mentioned changes above:
212
213 % git commit -a -m'explain git status and stuff about remotes'
214 Created commit daf8e63: explain git status and stuff about remotes
215 1 files changed, 83 insertions(+), 3 deletions(-)
216
217We can re-run git status and see something like this:
218
219 % git status
220 # On branch blead
221 # Your branch is ahead of 'origin/blead' by 2 commits.
222 #
223 # Untracked files:
224 # (use "git add <file>..." to include in what will be committed)
225 #
226 # deliberate.untracked
227 nothing added to commit but untracked files present (use "git add" to track)
228
39219fd3 229
6acba58e
LB
230When in doubt, before you do anything else, check your status and read
231it carefully, many questions are answered directly by the git status
232output.
39219fd3 233
c2cf2042
LB
234=head1 SUBMITTING A PATCH
235
236If you have a patch in mind for Perl, you should first get a copy of
237the repository:
238
239 % git clone git://perl5.git.perl.org/perl.git perl-git
240
241Then change into the directory:
242
243 % cd perl-git
244
6acba58e
LB
245Alternatively, if you already have a Perl repository, you should ensure
246that you're on the I<blead> branch, and your repository is up to date:
12322d22
A
247
248 % git checkout blead
249 % git pull
250
0549aefb
LB
251(It's preferable to patch against the latest blead version, since
252patches are usually integrated from blead to the maintenance branches.
253This does not apply, obviously, in the rare case where your patch is
254specific to a maintaince release.)
a44f43ac 255
6acba58e
LB
256Now that we have everything up to date, we need to create a temporary
257new branch for these changes and switch into it:
b1fccde5 258
a9b05323 259 % git checkout -b orange
23f8d33e 260
a9b05323
YO
261which is the short form of
262
b1fccde5
LB
263 % git branch orange
264 % git checkout orange
265
c2cf2042
LB
266Then make your changes. For example, if Leon Brocard changes his name
267to Orange Brocard, we should change his name in the AUTHORS file:
268
269 % perl -pi -e 's{Leon Brocard}{Orange Brocard}' AUTHORS
270
271You can see what files are changed:
272
273 % git status
f755e97d 274 # On branch orange
c2cf2042
LB
275 # Changes to be committed:
276 # (use "git reset HEAD <file>..." to unstage)
277 #
278 # modified: AUTHORS
279 #
280
c2cf2042
LB
281And you can see the changes:
282
283 % git diff
284 diff --git a/AUTHORS b/AUTHORS
285 index 293dd70..722c93e 100644
286 --- a/AUTHORS
287 +++ b/AUTHORS
7df2e4bc 288 @@ -541,7 +541,7 @@ Lars Hecking <lhecking@nmrc.ucc.ie>
c2cf2042
LB
289 Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
290 Leif Huhn <leif@hale.dkstat.com>
291 Len Johnson <lenjay@ibm.net>
292 -Leon Brocard <acme@astray.com>
293 +Orange Brocard <acme@astray.com>
294 Les Peters <lpeters@aol.net>
295 Lesley Binks <lesley.binks@gmail.com>
296 Lincoln D. Stein <lstein@cshl.org>
297
298Now commit your change locally:
299
dc3c3040 300 % git commit -a -m 'Rename Leon Brocard to Orange Brocard'
c2cf2042
LB
301 Created commit 6196c1d: Rename Leon Brocard to Orange Brocard
302 1 files changed, 1 insertions(+), 1 deletions(-)
303
dc3c3040
GA
304You can examine your last commit with:
305
306 % git show HEAD
307
308and if you are not happy with either the description or the patch
309itself you can fix it up by editing the files once more and then
310issue:
311
312 % git commit -a --amend
313
c2cf2042
LB
314Now you should create a patch file for all your local changes:
315
2af192ee 316 % git format-patch origin
c2cf2042
LB
317 0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
318
319You should now send an email to perl5-porters@perl.org with a
dc3c3040 320description of your changes, and include this patch file as an
c2cf2042
LB
321attachment.
322
b1fccde5
LB
323If you want to delete your temporary branch, you may do so with:
324
325 % git checkout blead
326 % git branch -d orange
327 error: The branch 'orange' is not an ancestor of your current HEAD.
328 If you are sure you want to delete it, run 'git branch -D orange'.
329 % git branch -D orange
330 Deleted branch orange.
7df2e4bc 331
a44f43ac
RGS
332=head2 A note on derived files
333
334Be aware that many files in the distribution are derivative--avoid
0549aefb
LB
335patching them, because git won't see the changes to them, and the build
336process will overwrite them. Patch the originals instead. Most
337utilities (like perldoc) are in this category, i.e. patch
338utils/perldoc.PL rather than utils/perldoc. Similarly, don't create
339patches for files under $src_root/ext from their copies found in
340$install_root/lib. If you are unsure about the proper location of a
341file that may have gotten copied while building the source
342distribution, consult the C<MANIFEST>.
a44f43ac
RGS
343
344=head2 A note on binary files
345
0549aefb
LB
346Since the patch(1) utility cannot deal with binary files, it's
347important that you either avoid the use of binary files in your patch,
348generate the files dynamically, or that you encode any binary files
349using the F<uupacktool.pl> utility.
a44f43ac
RGS
350
351Assuming you needed to include a gzip-encoded file for a module's test
352suite, you might do this as follows using the F<uupacktool.pl> utility:
353
354 $ perl uupacktool.pl -v -p -D lib/Some/Module/t/src/t.gz
355 Writing lib/Some/Module/t/src/t.gz into lib/Some/Module/t/src/t.gz.packed
356
357This will replace the C<t.gz> file with an encoded counterpart. During
0549aefb
LB
358C<make test>, before any tests are run, perl's Makefile will restore
359all the C<.packed> files mentioned in the MANIFEST to their original
360name. This means that the test suite does not need to be aware of this
361packing scheme and will not need to be altered.
a44f43ac
RGS
362
363=head2 Getting your patch accepted
364
0549aefb
LB
365The first thing you should include with your patch is a description of
366the problem that the patch corrects. If it is a code patch (rather
367than a documentation patch) you should also include a small test case
368that illustrates the bug (a patch to an existing test file is
369preferred).
a44f43ac
RGS
370
371If you are submitting a code patch there are several other things that
372you need to do.
373
374=over 4
375
376=item Comments, Comments, Comments
377
0549aefb
LB
378Be sure to adequately comment your code. While commenting every line
379is unnecessary, anything that takes advantage of side effects of
a44f43ac 380operators, that creates changes that will be felt outside of the
0549aefb
LB
381function being patched, or that others may find confusing should be
382documented. If you are going to err, it is better to err on the side
383of adding too many comments than too few.
a44f43ac
RGS
384
385=item Style
386
0549aefb
LB
387In general, please follow the particular style of the code you are
388patching.
a44f43ac 389
0549aefb
LB
390In particular, follow these general guidelines for patching Perl
391sources:
a44f43ac
RGS
392
393 8-wide tabs (no exceptions!)
394 4-wide indents for code, 2-wide indents for nested CPP #defines
395 try hard not to exceed 79-columns
396 ANSI C prototypes
397 uncuddled elses and "K&R" style for indenting control constructs
398 no C++ style (//) comments
399 mark places that need to be revisited with XXX (and revisit often!)
400 opening brace lines up with "if" when conditional spans multiple
401 lines; should be at end-of-line otherwise
402 in function definitions, name starts in column 0 (return value is on
403 previous line)
404 single space after keywords that are followed by parens, no space
405 between function name and following paren
406 avoid assignments in conditionals, but if they're unavoidable, use
407 extra paren, e.g. "if (a && (b = c)) ..."
408 "return foo;" rather than "return(foo);"
409 "if (!foo) ..." rather than "if (foo == FALSE) ..." etc.
410
411=item Testsuite
412
0549aefb
LB
413When submitting a patch you should make every effort to also include an
414addition to perl's regression tests to properly exercise your patch.
415Your testsuite additions should generally follow these guidelines
416(courtesy of Gurusamy Sarathy <gsar@activestate.com>):
a44f43ac
RGS
417
418 Know what you're testing. Read the docs, and the source.
419 Tend to fail, not succeed.
420 Interpret results strictly.
421 Use unrelated features (this will flush out bizarre interactions).
422 Use non-standard idioms (otherwise you are not testing TIMTOWTDI).
423 Avoid using hardcoded test numbers whenever possible (the
424 EXPECTED/GOT found in t/op/tie.t is much more maintainable,
425 and gives better failure reports).
426 Give meaningful error messages when a test fails.
427 Avoid using qx// and system() unless you are testing for them. If you
428 do use them, make sure that you cover _all_ perl platforms.
429 Unlink any temporary files you create.
430 Promote unforeseen warnings to errors with $SIG{__WARN__}.
431 Be sure to use the libraries and modules shipped with the version
432 being tested, not those that were already installed.
433 Add comments to the code explaining what you are testing for.
434 Make updating the '1..42' string unnecessary. Or make sure that
435 you update it.
436 Test _all_ behaviors of a given operator, library, or function:
437 - All optional arguments
438 - Return values in various contexts (boolean, scalar, list, lvalue)
439 - Use both global and lexical variables
440 - Don't forget the exceptional, pathological cases.
441
442=back
443
7df2e4bc
LB
444=head1 ACCEPTING A PATCH
445
446If you have received a patch file generated using the above section,
447you should try out the patch.
448
449First we need to create a temporary new branch for these changes and
450switch into it:
451
a9b05323 452 % git checkout -b experimental
7df2e4bc 453
6acba58e
LB
454Patches that were formatted by C<git format-patch> are applied with
455C<git am>:
7df2e4bc 456
2af192ee 457 % git am 0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
7df2e4bc
LB
458 Applying Rename Leon Brocard to Orange Brocard
459
6acba58e
LB
460If just a raw diff is provided, it is also possible use this two-step
461process:
09645c26
VP
462
463 % git apply bugfix.diff
dc3c3040 464 % git commit -a -m "Some fixing" --author="That Guy <that.guy@internets.com>"
09645c26 465
7df2e4bc
LB
466Now we can inspect the change:
467
dc3c3040 468 % git show HEAD
7df2e4bc
LB
469 commit b1b3dab48344cff6de4087efca3dbd63548ab5e2
470 Author: Leon Brocard <acme@astray.com>
471 Date: Fri Dec 19 17:02:59 2008 +0000
472
473 Rename Leon Brocard to Orange Brocard
7df2e4bc 474
7df2e4bc
LB
475 diff --git a/AUTHORS b/AUTHORS
476 index 293dd70..722c93e 100644
477 --- a/AUTHORS
478 +++ b/AUTHORS
479 @@ -541,7 +541,7 @@ Lars Hecking <lhecking@nmrc.ucc.ie>
480 Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
481 Leif Huhn <leif@hale.dkstat.com>
482 Len Johnson <lenjay@ibm.net>
483 -Leon Brocard <acme@astray.com>
484 +Orange Brocard <acme@astray.com>
485 Les Peters <lpeters@aol.net>
486 Lesley Binks <lesley.binks@gmail.com>
487 Lincoln D. Stein <lstein@cshl.org>
488
489If you are a committer to Perl and you think the patch is good, you can
75fb7651 490then merge it into blead then push it out to the main repository:
7df2e4bc
LB
491
492 % git checkout blead
d9847473 493 % git merge experimental
75fb7651 494 % git push
7df2e4bc
LB
495
496If you want to delete your temporary branch, you may do so with:
497
498 % git checkout blead
499 % git branch -d experimental
500 error: The branch 'experimental' is not an ancestor of your current HEAD.
501 If you are sure you want to delete it, run 'git branch -D experimental'.
502 % git branch -D experimental
503 Deleted branch experimental.
b0d36535
YO
504
505=head1 CLEANING A WORKING DIRECTORY
506
6acba58e 507The command C<git clean> can with varying arguments be used as a
dc3c3040 508replacement for C<make clean>.
b0d36535
YO
509
510To reset your working directory to a pristine condition you can do:
511
512 git clean -dxf
513
514However, be aware this will delete ALL untracked content. You can use
515
516 git clean -Xf
517
6acba58e
LB
518to remove all ignored untracked files, such as build and test
519byproduct, but leave any manually created files alone.
b0d36535 520
0549aefb 521If you only want to cancel some uncommitted edits, you can use C<git
dc3c3040
GA
522checkout> and give it a list of files to be reverted, or C<git
523checkout -f> to revert them all.
f755e97d
RGS
524
525If you want to cancel one or several commits, you can use C<git reset>.
526
d82a90c1
VP
527=head1 BISECTING
528
6acba58e
LB
529C<git> provides a built-in way to determine, with a binary search in
530the history, which commit should be blamed for introducing a given bug.
d82a90c1 531
6acba58e
LB
532Suppose that we have a script F<~/testcase.pl> that exits with C<0>
533when some behaviour is correct, and with C<1> when it's faulty. We need
534an helper script that automates building C<perl> and running the
535testcase:
d82a90c1
VP
536
537 % cat ~/run
538 #!/bin/sh
539 git clean -dxf
540 # If you can use ccache, add -Dcc=ccache\ gcc -Dld=gcc to the Configure line
541 sh Configure -des -Dusedevel -Doptimize="-g" || exit 125
542 make || exit 125
543 ./perl -Ilib ~/testcase.pl
544
6acba58e
LB
545This script may return C<125> to indicate that the corresponding commit
546should be skipped. Otherwise, it returns the status of
547F<~/testcase.pl>.
d82a90c1
VP
548
549We first enter in bisect mode with:
550
551 % git bisect start
552
6acba58e
LB
553For example, if the bug is present on C<HEAD> but wasn't in 5.10.0,
554C<git> will learn about this when you enter:
d82a90c1
VP
555
556 % git bisect bad
557 % git bisect good perl-5.10.0
558 Bisecting: 853 revisions left to test after this
559
6acba58e
LB
560This results in checking out the median commit between C<HEAD> and
561C<perl-5.10.0>. We can then run the bisecting process with:
d82a90c1
VP
562
563 % git bisect run ~/run
564
565When the first bad commit is isolated, C<git bisect> will tell you so:
566
567 ca4cfd28534303b82a216cfe83a1c80cbc3b9dc5 is first bad commit
568 commit ca4cfd28534303b82a216cfe83a1c80cbc3b9dc5
569 Author: Dave Mitchell <davem@fdisolutions.com>
570 Date: Sat Feb 9 14:56:23 2008 +0000
571
9469eb4a 572 [perl #49472] Attributes + Unknown Error
d82a90c1
VP
573 ...
574
575 bisect run success
576
6acba58e
LB
577You can peek into the bisecting process with C<git bisect log> and
578C<git bisect visualize>. C<git bisect reset> will get you out of bisect
579mode.
d82a90c1 580
6acba58e
LB
581Please note that the first C<good> state must be an ancestor of the
582first C<bad> state. If you want to search for the commit that I<solved>
583some bug, you have to negate your test case (i.e. exit with C<1> if OK
584and C<0> if not) and still mark the lower bound as C<good> and the
585upper as C<bad>. The "first bad commit" has then to be understood as
586the "first commit where the bug is solved".
d82a90c1 587
6acba58e
LB
588C<git help bisect> has much more information on how you can tweak your
589binary searches.
9d68b7ed 590
03050721
LB
591=head1 SUBMITTING A PATCH VIA GITHUB
592
593GitHub is a website that makes it easy to fork and publish projects
594with Git. First you should set up a GitHub account and log in.
595
596Perl's git repository is mirrored on GitHub at this page:
597
598 http://github.com/github/perl/tree/blead
599
600Visit the page and click the "fork" button. This clones the Perl git
601repository for you and provides you with "Your Clone URL" from which
602you should clone:
603
604 % git clone git@github.com:USERNAME/perl.git perl-github
605
606We shall make the same patch as above, creating a new branch:
607
608 % cd perl-github
609 % git remote add upstream git://github.com/github/perl.git
610 % git pull upstream blead
611 % git checkout -b orange
612 % perl -pi -e 's{Leon Brocard}{Orange Brocard}' AUTHORS
dc3c3040 613 % git commit -a -m 'Rename Leon Brocard to Orange Brocard'
03050721
LB
614 % git push origin orange
615
616The orange branch has been pushed to GitHub, so you should now send an
617email to perl5-porters@perl.org with a description of your changes and
618the following information:
619
620 http://github.com/USERNAME/perl/tree/orange
621 git@github.com:USERNAME/perl.git branch orange
622
9469eb4a 623=head1 COMMITTING TO MAINTENANCE VERSIONS
9d68b7ed
LB
624
625To commit to a maintenance version of perl, you need to create a local
626tracking branch:
627
628 % git checkout --track -b maint-5.005 origin/maint-5.005
629
0549aefb
LB
630This creates a local branch named C<maint-5.005>, which tracks the
631remote branch C<origin/maint-5.005>. Then you can pull, commit, merge
632and push as before.
b0d36535 633
f755e97d 634You can also cherry-pick commits from blead and another branch, by
0549aefb
LB
635using the C<git cherry-pick> command. It is recommended to use the
636B<-x> option to C<git cherry-pick> in order to record the SHA1 of the
637original commit in the new commit message.
f755e97d
RGS
638
639=head1 SEE ALSO
640
641The git documentation, accessible via C<git help command>.
0549aefb 642