]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/gittutorial.txt
Merge branch 'master' of github.com:vnwildman/git
[thirdparty/git.git] / Documentation / gittutorial.txt
CommitLineData
b27a23e3
CC
1gittutorial(7)
2==============
3
4NAME
5----
022cf2bf 6gittutorial - A tutorial introduction to Git
b27a23e3
CC
7
8SYNOPSIS
9--------
7791a1d9 10[verse]
b27a23e3
CC
11git *
12
13DESCRIPTION
14-----------
8c7fa247 15
2de9b711 16This tutorial explains how to import a new project into Git, make
927a503c 17changes to it, and share changes with other developers.
8c7fa247 18
2de9b711 19If you are instead primarily interested in using Git to fetch a project,
cd50aba9
BF
20for example, to test the latest version, you may prefer to start with
21the first two chapters of link:user-manual.html[The Git User's Manual].
22
46e56e81 23First, note that you can get documentation for a command such as
483bc4f0 24`git log --graph` with:
8c7fa247 25
927a503c 26------------------------------------------------
3861cd55 27$ man git-log
927a503c 28------------------------------------------------
8c7fa247 29
6e702c24
CC
30or:
31
32------------------------------------------------
33$ git help log
34------------------------------------------------
35
36With the latter, you can use the manual viewer of your choice; see
37linkgit:git-help[1] for more information.
38
2de9b711 39It is a good idea to introduce yourself to Git with your name and
c14261ea
NP
40public email address before doing any operation. The easiest
41way to do so is:
66589230
JH
42
43------------------------------------------------
e0d10e1c
TP
44$ git config --global user.name "Your Name Comes Here"
45$ git config --global user.email you@yourdomain.example.com
66589230
JH
46------------------------------------------------
47
48
927a503c
BF
49Importing a new project
50-----------------------
8c7fa247 51
927a503c 52Assume you have a tarball project.tar.gz with your initial work. You
2de9b711 53can place it under Git revision control as follows.
8c7fa247 54
8db9307c 55------------------------------------------------
dcc6e28f 56$ tar xzf project.tar.gz
927a503c 57$ cd project
515377ea 58$ git init
8db9307c 59------------------------------------------------
8c7fa247 60
927a503c 61Git will reply
8c7fa247 62
927a503c 63------------------------------------------------
ef0a89a6 64Initialized empty Git repository in .git/
927a503c 65------------------------------------------------
8c7fa247 66
927a503c 67You've now initialized the working directory--you may notice a new
93f9cc67
BF
68directory created, named ".git".
69
2de9b711 70Next, tell Git to take a snapshot of the contents of all files under the
0b444cdb 71current directory (note the '.'), with 'git add':
8c7fa247 72
8db9307c 73------------------------------------------------
927a503c 74$ git add .
8db9307c 75------------------------------------------------
8c7fa247 76
2de9b711 77This snapshot is now stored in a temporary staging area which Git calls
93f9cc67 78the "index". You can permanently store the contents of the index in the
0b444cdb 79repository with 'git commit':
8c7fa247 80
927a503c 81------------------------------------------------
66589230 82$ git commit
927a503c 83------------------------------------------------
8c7fa247 84
93f9cc67 85This will prompt you for a commit message. You've now stored the first
2de9b711 86version of your project in Git.
8c7fa247 87
84dee6bb
BF
88Making changes
89--------------
90
93f9cc67 91Modify some files, then add their updated contents to the index:
8c7fa247 92
8db9307c 93------------------------------------------------
93f9cc67 94$ git add file1 file2 file3
8db9307c 95------------------------------------------------
8c7fa247 96
93f9cc67 97You are now ready to commit. You can see what is about to be committed
0b444cdb 98using 'git diff' with the --cached option:
93f9cc67
BF
99
100------------------------------------------------
101$ git diff --cached
102------------------------------------------------
103
0b444cdb 104(Without --cached, 'git diff' will show you any changes that
93f9cc67 105you've made but not yet added to the index.) You can also get a brief
0b444cdb 106summary of the situation with 'git status':
93f9cc67
BF
107
108------------------------------------------------
109$ git status
8942821e
SN
110On branch master
111Changes to be committed:
7560f547 112Your branch is up to date with 'origin/master'.
80f537f7 113 (use "git restore --staged <file>..." to unstage)
8942821e
SN
114
115 modified: file1
116 modified: file2
117 modified: file3
118
93f9cc67
BF
119------------------------------------------------
120
121If you need to make any further adjustments, do so now, and then add any
122newly modified content to the index. Finally, commit your changes with:
8c7fa247 123
927a503c 124------------------------------------------------
c1d179f8 125$ git commit
927a503c 126------------------------------------------------
f2416c27 127
2feaf4e9 128This will again prompt you for a message describing the change, and then
93f9cc67 129record a new version of the project.
84dee6bb 130
0b444cdb 131Alternatively, instead of running 'git add' beforehand, you can use
66589230
JH
132
133------------------------------------------------
134$ git commit -a
135------------------------------------------------
8c7fa247 136
93f9cc67
BF
137which will automatically notice any modified (but not new) files, add
138them to the index, and commit, all in one step.
84dee6bb 139
927a503c
BF
140A note on commit messages: Though not required, it's a good idea to
141begin the commit message with a single short (less than 50 character)
142line summarizing the change, followed by a blank line and then a more
52ffe995
JW
143thorough description. The text up to the first blank line in a commit
144message is treated as the commit title, and that title is used
2de9b711 145throughout Git. For example, linkgit:git-format-patch[1] turns a
52ffe995
JW
146commit into email, and it uses the title on the Subject line and the
147rest of the commit in the body.
8c7fa247 148
366bfcb6
NP
149Git tracks content not files
150----------------------------
151
483bc4f0
JN
152Many revision control systems provide an `add` command that tells the
153system to start tracking changes to a new file. Git's `add` command
0b444cdb 154does something simpler and more powerful: 'git add' is used both for new
93f9cc67
BF
155and newly modified files, and in both cases it takes a snapshot of the
156given files and stages that content in the index, ready for inclusion in
157the next commit.
8c7fa247 158
23c9ccb2
BF
159Viewing project history
160-----------------------
8c7fa247 161
927a503c 162At any point you can view the history of your changes using
8c7fa247 163
927a503c 164------------------------------------------------
67e6e5c4 165$ git log
927a503c 166------------------------------------------------
8c7fa247 167
927a503c 168If you also want to see complete diffs at each step, use
8c7fa247 169
927a503c 170------------------------------------------------
67e6e5c4 171$ git log -p
927a503c 172------------------------------------------------
8c7fa247 173
c1d179f8
JH
174Often the overview of the change is useful to get a feel of
175each step
176
177------------------------------------------------
178$ git log --stat --summary
179------------------------------------------------
180
927a503c
BF
181Managing branches
182-----------------
2a29da7c 183
2de9b711 184A single Git repository can maintain multiple branches of
927a503c 185development. To create a new branch named "experimental", use
8c7fa247 186
927a503c
BF
187------------------------------------------------
188$ git branch experimental
189------------------------------------------------
8c7fa247 190
927a503c 191If you now run
8c7fa247 192
927a503c
BF
193------------------------------------------------
194$ git branch
195------------------------------------------------
8c7fa247 196
927a503c 197you'll get a list of all existing branches:
8c7fa247 198
8db9307c 199------------------------------------------------
927a503c
BF
200 experimental
201* master
8db9307c 202------------------------------------------------
8c7fa247 203
927a503c
BF
204The "experimental" branch is the one you just created, and the
205"master" branch is a default branch that was created for you
206automatically. The asterisk marks the branch you are currently on;
207type
8c7fa247 208
927a503c 209------------------------------------------------
328c6cb8 210$ git switch experimental
927a503c 211------------------------------------------------
8c7fa247 212
927a503c
BF
213to switch to the experimental branch. Now edit a file, commit the
214change, and switch back to the master branch:
8c7fa247 215
927a503c
BF
216------------------------------------------------
217(edit file)
218$ git commit -a
328c6cb8 219$ git switch master
927a503c 220------------------------------------------------
8c7fa247 221
927a503c
BF
222Check that the change you made is no longer visible, since it was
223made on the experimental branch and you're back on the master branch.
8c7fa247 224
927a503c 225You can make a different change on the master branch:
8c7fa247 226
927a503c
BF
227------------------------------------------------
228(edit file)
229$ git commit -a
230------------------------------------------------
8c7fa247 231
927a503c 232at this point the two branches have diverged, with different changes
59427063 233made in each. To merge the changes made in experimental into master, run
ed616049 234
927a503c 235------------------------------------------------
c14261ea 236$ git merge experimental
927a503c
BF
237------------------------------------------------
238
239If the changes don't conflict, you're done. If there are conflicts,
240markers will be left in the problematic files showing the conflict;
8c7fa247 241
8db9307c 242------------------------------------------------
927a503c 243$ git diff
8db9307c 244------------------------------------------------
8c7fa247 245
927a503c
BF
246will show this. Once you've edited the files to resolve the
247conflicts,
8c7fa247 248
8db9307c 249------------------------------------------------
927a503c 250$ git commit -a
8db9307c 251------------------------------------------------
8c7fa247 252
927a503c 253will commit the result of the merge. Finally,
8c7fa247 254
8db9307c 255------------------------------------------------
927a503c 256$ gitk
8db9307c 257------------------------------------------------
8c7fa247 258
927a503c 259will show a nice graphical representation of the resulting history.
8c7fa247 260
9c9410e1
SB
261At this point you could delete the experimental branch with
262
263------------------------------------------------
264$ git branch -d experimental
265------------------------------------------------
266
267This command ensures that the changes in the experimental branch are
268already in the current branch.
269
927a503c
BF
270If you develop on a branch crazy-idea, then regret it, you can always
271delete the branch with
8c7fa247 272
927a503c
BF
273-------------------------------------
274$ git branch -D crazy-idea
275-------------------------------------
8c7fa247 276
927a503c
BF
277Branches are cheap and easy, so this is a good way to try something
278out.
8c7fa247 279
2de9b711 280Using Git for collaboration
927a503c 281---------------------------
3eb5128a 282
2de9b711 283Suppose that Alice has started a new project with a Git repository in
927a503c
BF
284/home/alice/project, and that Bob, who has a home directory on the
285same machine, wants to contribute.
3eb5128a 286
927a503c 287Bob begins with:
3eb5128a 288
8db9307c 289------------------------------------------------
5d5e88af 290bob$ git clone /home/alice/project myrepo
8db9307c 291------------------------------------------------
3eb5128a 292
927a503c
BF
293This creates a new directory "myrepo" containing a clone of Alice's
294repository. The clone is on an equal footing with the original
abda1ef5 295project, possessing its own copy of the original project's history.
927a503c
BF
296
297Bob then makes some changes and commits them:
ed616049 298
927a503c
BF
299------------------------------------------------
300(edit files)
5d5e88af 301bob$ git commit -a
927a503c
BF
302(repeat as necessary)
303------------------------------------------------
ed616049 304
927a503c
BF
305When he's ready, he tells Alice to pull changes from the repository
306at /home/bob/myrepo. She does this with:
ed616049 307
927a503c 308------------------------------------------------
5d5e88af
IK
309alice$ cd /home/alice/project
310alice$ git pull /home/bob/myrepo master
927a503c 311------------------------------------------------
ed616049 312
c1ff284a 313This merges the changes from Bob's "master" branch into Alice's
93ee7823 314current branch. If Alice has made her own changes in the meantime,
c30e5673 315then she may need to manually fix any conflicts.
2ae6c706 316
93ee7823
BF
317The "pull" command thus performs two operations: it fetches changes
318from a remote branch, then merges them into the current branch.
2ae6c706 319
dc29bc8b
JH
320Note that in general, Alice would want her local changes committed before
321initiating this "pull". If Bob's work conflicts with what Alice did since
322their histories forked, Alice will use her working tree and the index to
323resolve conflicts, and existing local changes will interfere with the
2de9b711 324conflict resolution process (Git will still perform the fetch but will
dc29bc8b
JH
325refuse to merge --- Alice will have to get rid of her local changes in
326some way and pull again when this happens).
327
328Alice can peek at what Bob did without merging first, using the "fetch"
329command; this allows Alice to inspect what Bob did, using a special
330symbol "FETCH_HEAD", in order to determine if he has anything worth
331pulling, like this:
332
333------------------------------------------------
334alice$ git fetch /home/bob/myrepo master
53d1589f 335alice$ git log -p HEAD..FETCH_HEAD
dc29bc8b
JH
336------------------------------------------------
337
338This operation is safe even if Alice has uncommitted local changes.
21d777f2
TLSC
339The range notation "HEAD..FETCH_HEAD" means "show everything that is reachable
340from the FETCH_HEAD but exclude anything that is reachable from HEAD".
53d1589f 341Alice already knows everything that leads to her current state (HEAD),
21d777f2
TLSC
342and reviews what Bob has in his state (FETCH_HEAD) that she has not
343seen with this command.
53d1589f
PC
344
345If Alice wants to visualize what Bob did since their histories forked
346she can issue the following command:
347
348------------------------------------------------
349$ gitk HEAD..FETCH_HEAD
350------------------------------------------------
351
352This uses the same two-dot range notation we saw earlier with 'git log'.
353
354Alice may want to view what both of them did since they forked.
355She can use three-dot form instead of the two-dot form:
356
357------------------------------------------------
358$ gitk HEAD...FETCH_HEAD
359------------------------------------------------
360
361This means "show everything that is reachable from either one, but
362exclude anything that is reachable from both of them".
363
364Please note that these range notation can be used with both gitk
365and "git log".
dc29bc8b
JH
366
367After inspecting what Bob did, if there is nothing urgent, Alice may
368decide to continue working without pulling from Bob. If Bob's history
369does have something Alice would immediately need, Alice may choose to
370stash her work-in-progress first, do a "pull", and then finally unstash
371her work-in-progress on top of the resulting history.
372
c1ff284a
JH
373When you are working in a small closely knit group, it is not
374unusual to interact with the same repository over and over
375again. By defining 'remote' repository shorthand, you can make
376it easier:
377
378------------------------------------------------
5d5e88af 379alice$ git remote add bob /home/bob/myrepo
c1ff284a
JH
380------------------------------------------------
381
21d777f2 382With this, Alice can perform the first part of the "pull" operation
0b444cdb 383alone using the 'git fetch' command without merging them with her own
21d777f2 384branch, using:
2a29da7c 385
927a503c 386-------------------------------------
5d5e88af 387alice$ git fetch bob
927a503c 388-------------------------------------
2a29da7c 389
c1ff284a 390Unlike the longhand form, when Alice fetches from Bob using a
0b444cdb 391remote repository shorthand set up with 'git remote', what was
0e615b25 392fetched is stored in a remote-tracking branch, in this case
c1ff284a 393`bob/master`. So after this:
a7333f9e 394
927a503c 395-------------------------------------
5d5e88af 396alice$ git log -p master..bob/master
927a503c 397-------------------------------------
a7333f9e 398
927a503c
BF
399shows a list of all the changes that Bob made since he branched from
400Alice's master branch.
a7333f9e 401
c1ff284a 402After examining those changes, Alice
c14261ea 403could merge the changes into her master branch:
ed616049 404
927a503c 405-------------------------------------
5d5e88af 406alice$ git merge bob/master
927a503c 407-------------------------------------
ed616049 408
60109d0e
MM
409This `merge` can also be done by 'pulling from her own remote-tracking
410branch', like this:
93ee7823
BF
411
412-------------------------------------
5d5e88af 413alice$ git pull . remotes/bob/master
93ee7823
BF
414-------------------------------------
415
c1ff284a 416Note that git pull always merges into the current branch,
02783075 417regardless of what else is given on the command line.
93ee7823 418
927a503c 419Later, Bob can update his repo with Alice's latest changes using
ed616049 420
927a503c 421-------------------------------------
5d5e88af 422bob$ git pull
927a503c 423-------------------------------------
ed616049 424
927a503c 425Note that he doesn't need to give the path to Alice's repository;
2de9b711 426when Bob cloned Alice's repository, Git stored the location of her
d66409f0
BF
427repository in the repository configuration, and that location is
428used for pulls:
2a29da7c 429
927a503c 430-------------------------------------
5d5e88af 431bob$ git config --get remote.origin.url
8960b5a7 432/home/alice/project
927a503c 433-------------------------------------
2a29da7c 434
0b444cdb 435(The complete configuration created by 'git clone' is visible using
483bc4f0 436`git config -l`, and the linkgit:git-config[1] man page
d66409f0
BF
437explains the meaning of each option.)
438
439Git also keeps a pristine copy of Alice's master branch under the
440name "origin/master":
441
442-------------------------------------
5d5e88af 443bob$ git branch -r
d66409f0
BF
444 origin/master
445-------------------------------------
2a29da7c 446
927a503c
BF
447If Bob later decides to work from a different host, he can still
448perform clones and pulls using the ssh protocol:
2a29da7c 449
927a503c 450-------------------------------------
5d5e88af 451bob$ git clone alice.org:/home/alice/project myrepo
927a503c 452-------------------------------------
2a29da7c 453
0d0bac67 454Alternatively, Git has a native protocol, or can use http;
5162e697 455see linkgit:git-pull[1] for details.
0c04094b 456
927a503c 457Git can also be used in a CVS-like mode, with a central repository
5162e697 458that various users push changes to; see linkgit:git-push[1] and
6998e4db 459linkgit:gitcvs-migration[7].
0c04094b 460
f1fe3846
BF
461Exploring history
462-----------------
0c04094b 463
f1fe3846 464Git history is represented as a series of interrelated commits. We
0b444cdb 465have already seen that the 'git log' command can list those commits.
f1fe3846
BF
466Note that first line of each git log entry also gives a name for the
467commit:
c9517341 468
927a503c 469-------------------------------------
f1fe3846
BF
470$ git log
471commit c82a22c39cbc32576f64f5c6b3f24b99ea8149c7
472Author: Junio C Hamano <junkio@cox.net>
473Date: Tue May 16 17:18:22 2006 -0700
474
475 merge-base: Clarify the comments on post processing.
927a503c 476-------------------------------------
0c04094b 477
0b444cdb 478We can give this name to 'git show' to see the details about this
f1fe3846 479commit.
0c04094b 480
927a503c 481-------------------------------------
f1fe3846 482$ git show c82a22c39cbc32576f64f5c6b3f24b99ea8149c7
927a503c 483-------------------------------------
0c04094b 484
c1d179f8 485But there are other ways to refer to commits. You can use any initial
f1fe3846 486part of the name that is long enough to uniquely identify the commit:
0c04094b 487
f1fe3846
BF
488-------------------------------------
489$ git show c82a22c39c # the first few characters of the name are
490 # usually enough
491$ git show HEAD # the tip of the current branch
492$ git show experimental # the tip of the "experimental" branch
493-------------------------------------
494
9c9410e1
SB
495Every commit usually has one "parent" commit
496which points to the previous state of the project:
0c04094b 497
927a503c 498-------------------------------------
f1fe3846
BF
499$ git show HEAD^ # to see the parent of HEAD
500$ git show HEAD^^ # to see the grandparent of HEAD
501$ git show HEAD~4 # to see the great-great grandparent of HEAD
927a503c 502-------------------------------------
e7c1ca42 503
f1fe3846
BF
504Note that merge commits may have more than one parent:
505
506-------------------------------------
507$ git show HEAD^1 # show the first parent of HEAD (same as HEAD^)
508$ git show HEAD^2 # show the second parent of HEAD
509-------------------------------------
44760f1d 510
f1fe3846 511You can also give commits names of your own; after running
3eb5128a 512
927a503c 513-------------------------------------
b1889c36 514$ git tag v2.5 1b2e1d63ff
927a503c 515-------------------------------------
3eb5128a 516
f1fe3846
BF
517you can refer to 1b2e1d63ff by the name "v2.5". If you intend to
518share this name with other people (for example, to identify a release
519version), you should create a "tag" object, and perhaps sign it; see
5162e697 520linkgit:git-tag[1] for details.
f1fe3846 521
2de9b711 522Any Git command that needs to know a commit can take any of these
f1fe3846 523names. For example:
3eb5128a 524
927a503c 525-------------------------------------
f1fe3846
BF
526$ git diff v2.5 HEAD # compare the current HEAD to v2.5
527$ git branch stable v2.5 # start a new branch named "stable" based
528 # at v2.5
529$ git reset --hard HEAD^ # reset your current branch and working
37425065 530 # directory to its state at HEAD^
927a503c 531-------------------------------------
c9517341 532
f1fe3846
BF
533Be careful with that last command: in addition to losing any changes
534in the working directory, it will also remove all later commits from
535this branch. If this branch is the only branch containing those
0b444cdb 536commits, they will be lost. Also, don't use 'git reset' on a
a9d1836b
JH
537publicly-visible branch that other developers pull from, as it will
538force needless merges on other developers to clean up the history.
0b444cdb 539If you need to undo changes that you have pushed, use 'git revert'
6e2e1cfb 540instead.
c9517341 541
0b444cdb 542The 'git grep' command can search for strings in any version of your
f1fe3846 543project, so
c9517341 544
927a503c 545-------------------------------------
f1fe3846 546$ git grep "hello" v2.5
927a503c 547-------------------------------------
c9517341 548
abda1ef5 549searches for all occurrences of "hello" in v2.5.
2a29da7c 550
0b444cdb 551If you leave out the commit name, 'git grep' will search any of the
f1fe3846 552files it manages in your current directory. So
2a29da7c 553
927a503c 554-------------------------------------
f1fe3846 555$ git grep "hello"
dc5f9239
JH
556-------------------------------------
557
2de9b711 558is a quick way to search just the files that are tracked by Git.
927a503c 559
2de9b711 560Many Git commands also take sets of commits, which can be specified
0b444cdb 561in a number of ways. Here are some examples with 'git log':
927a503c
BF
562
563-------------------------------------
f1fe3846
BF
564$ git log v2.5..v2.6 # commits between v2.5 and v2.6
565$ git log v2.5.. # commits since v2.5
566$ git log --since="2 weeks ago" # commits from the last 2 weeks
567$ git log v2.5.. Makefile # commits since v2.5 which modify
568 # Makefile
927a503c 569-------------------------------------
6f60300b 570
0b444cdb 571You can also give 'git log' a "range" of commits where the first is not
f1fe3846 572necessarily an ancestor of the second; for example, if the tips of
21d777f2 573the branches "stable" and "master" diverged from a common
f1fe3846
BF
574commit some time ago, then
575
576-------------------------------------
21d777f2 577$ git log stable..master
f1fe3846
BF
578-------------------------------------
579
21d777f2 580will list commits made in the master branch but not in the
f1fe3846
BF
581stable branch, while
582
583-------------------------------------
21d777f2 584$ git log master..stable
f1fe3846
BF
585-------------------------------------
586
587will show the list of commits made on the stable branch but not
21d777f2 588the master branch.
f1fe3846 589
0b444cdb 590The 'git log' command has a weakness: it must present commits in a
f1fe3846 591list. When the history has lines of development that diverged and
0b444cdb 592then merged back together, the order in which 'git log' presents
f1fe3846
BF
593those commits is meaningless.
594
c7719fbe 595Most projects with multiple contributors (such as the Linux kernel,
2de9b711 596or Git itself) have frequent merges, and 'gitk' does a better job of
f1fe3846
BF
597visualizing their history. For example,
598
599-------------------------------------
600$ gitk --since="2 weeks ago" drivers/
601-------------------------------------
602
603allows you to browse any commits from the last 2 weeks of commits
2be1bc48
BF
604that modified files under the "drivers" directory. (Note: you can
605adjust gitk's fonts by holding down the control key while pressing
606"-" or "+".)
f1fe3846
BF
607
608Finally, most commands that take filenames will optionally allow you
609to precede any filename by a commit, to specify a particular version
38573864 610of the file:
f1fe3846
BF
611
612-------------------------------------
613$ git diff v2.5:Makefile HEAD:Makefile.in
614-------------------------------------
927a503c 615
0b444cdb 616You can also use 'git show' to see any such file:
38573864
BF
617
618-------------------------------------
9c9410e1 619$ git show v2.5:Makefile
38573864
BF
620-------------------------------------
621
927a503c
BF
622Next Steps
623----------
624
e31952da
BF
625This tutorial should be enough to perform basic distributed revision
626control for your projects. However, to fully understand the depth
2de9b711 627and power of Git you need to understand two simple ideas on which it
e31952da
BF
628is based:
629
630 * The object database is the rather elegant system used to
631 store the history of your project--files, directories, and
632 commits.
633
634 * The index file is a cache of the state of a directory tree,
635 used to create commits, check out working directories, and
636 hold the various trees involved in a merge.
637
6998e4db 638Part two of this tutorial explains the object
e31952da 639database, the index file, and a few other odds and ends that you'll
2de9b711 640need to make the most of Git. You can find it at linkgit:gittutorial-2[7].
e31952da 641
cd50aba9 642If you don't want to continue with that right away, a few other
e31952da 643digressions that may be interesting at this point are:
927a503c 644
5162e697 645 * linkgit:git-format-patch[1], linkgit:git-am[1]: These convert
927a503c 646 series of git commits into emailed patches, and vice versa,
c7719fbe 647 useful for projects such as the Linux kernel which rely heavily
927a503c
BF
648 on emailed patches.
649
5162e697 650 * linkgit:git-bisect[1]: When there is a regression in your
927a503c
BF
651 project, one way to track down the bug is by searching through
652 the history to find the exact commit that's to blame. Git bisect
653 can help you perform a binary search for that commit. It is
654 smart enough to perform a close-to-optimal search even in the
655 case of complex non-linear history with lots of merged branches.
656
801a011d
TR
657 * linkgit:gitworkflows[7]: Gives an overview of recommended
658 workflows.
659
673151a9 660 * linkgit:giteveryday[7]: Everyday Git with 20 Commands Or So.
e31952da 661
6998e4db 662 * linkgit:gitcvs-migration[7]: Git for CVS users.
b27a23e3
CC
663
664SEE ALSO
665--------
666linkgit:gittutorial-2[7],
667linkgit:gitcvs-migration[7],
497c8331
CC
668linkgit:gitcore-tutorial[7],
669linkgit:gitglossary[7],
6e702c24 670linkgit:git-help[1],
801a011d 671linkgit:gitworkflows[7],
673151a9 672linkgit:giteveryday[7],
b27a23e3
CC
673link:user-manual.html[The Git User's Manual]
674
675GIT
676---
941b9c52 677Part of the linkgit:git[1] suite