30ad103b14f909c19f54456a36eae40cc51fdb01
   1Git User's Manual
   2_________________
   3
   4This manual is designed to be readable by someone with basic unix
   5commandline skills, but no previous knowledge of git.
   6
   7Comprehensive reference documentation is available through the man
   8pages.  For a command such as "git clone", just use
   9
  10------------------------------------------------
  11$ man git-clone
  12------------------------------------------------
  13
  14Repositories and Branches
  15=========================
  16
  17How to get a git repository
  18---------------------------
  19
  20It will be useful to have a git repository to experiment with as you
  21read this manual.
  22
  23The best way to get one is by using the gitlink:git-clone[1] command
  24to download a copy of an existing repository for a project that you
  25are interested in.  If you don't already have a project in mind, here
  26are some interesting examples:
  27
  28------------------------------------------------
  29        # git itself (approx. 10MB download):
  30$ git clone git://git.kernel.org/pub/scm/git/git.git
  31        # the linux kernel (approx. 150MB download):
  32$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
  33------------------------------------------------
  34
  35The initial clone may be time-consuming for a large project, but you
  36will only need to clone once.
  37
  38The clone command creates a new directory named after the project
  39("git" or "linux-2.6" in the examples above).  After you cd into this
  40directory, you will see that it contains a copy of the project files,
  41together with a special top-level directory named ".git", which
  42contains all the information about the history of the project.
  43
  44In the following, examples will be taken from one of the two
  45repositories above.
  46
  47How to check out a different version of a project
  48-------------------------------------------------
  49
  50Git is best thought of as a tool for storing the history of a
  51collection of files.  It stores the history as a compressed
  52collection of interrelated snapshots (versions) of the project's
  53contents.
  54
  55A single git repository may contain multiple branches.  Each branch
  56is a bookmark referencing a particular point in the project history.
  57The gitlink:git-branch[1] command shows you the list of branches:
  58
  59------------------------------------------------
  60$ git branch
  61* master
  62------------------------------------------------
  63
  64A freshly cloned repository contains a single branch, named "master",
  65and the working directory contains the version of the project
  66referred to by the master branch.
  67
  68Most projects also use tags.  Tags, like branches, are references
  69into the project's history, and can be listed using the
  70gitlink:git-tag[1] command:
  71
  72------------------------------------------------
  73$ git tag -l
  74v2.6.11
  75v2.6.11-tree
  76v2.6.12
  77v2.6.12-rc2
  78v2.6.12-rc3
  79v2.6.12-rc4
  80v2.6.12-rc5
  81v2.6.12-rc6
  82v2.6.13
  83...
  84------------------------------------------------
  85
  86Create a new branch pointing to one of these versions and check it
  87out using gitlink:git-checkout[1]:
  88
  89------------------------------------------------
  90$ git checkout -b new v2.6.13
  91------------------------------------------------
  92
  93The working directory then reflects the contents that the project had
  94when it was tagged v2.6.13, and gitlink:git-branch[1] shows two
  95branches, with an asterisk marking the currently checked-out branch:
  96
  97------------------------------------------------
  98$ git branch
  99  master
 100* new
 101------------------------------------------------
 102
 103If you decide that you'd rather see version 2.6.17, you can modify
 104the current branch to point at v2.6.17 instead, with
 105
 106------------------------------------------------
 107$ git reset --hard v2.6.17
 108------------------------------------------------
 109
 110Note that if the current branch was your only reference to a
 111particular point in history, then resetting that branch may leave you
 112with no way to find the history it used to point to; so use this
 113command carefully.
 114
 115Understanding History: Commits
 116------------------------------
 117
 118Every change in the history of a project is represented by a commit.
 119The gitlink:git-show[1] command shows the most recent commit on the
 120current branch:
 121
 122------------------------------------------------
 123$ git show
 124commit 2b5f6dcce5bf94b9b119e9ed8d537098ec61c3d2
 125Author: Jamal Hadi Salim <hadi@cyberus.ca>
 126Date:   Sat Dec 2 22:22:25 2006 -0800
 127
 128    [XFRM]: Fix aevent structuring to be more complete.
 129    
 130    aevents can not uniquely identify an SA. We break the ABI with this
 131    patch, but consensus is that since it is not yet utilized by any
 132    (known) application then it is fine (better do it now than later).
 133    
 134    Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca>
 135    Signed-off-by: David S. Miller <davem@davemloft.net>
 136
 137diff --git a/Documentation/networking/xfrm_sync.txt b/Documentation/networking/xfrm_sync.txt
 138index 8be626f..d7aac9d 100644
 139--- a/Documentation/networking/xfrm_sync.txt
 140+++ b/Documentation/networking/xfrm_sync.txt
 141@@ -47,10 +47,13 @@ aevent_id structure looks like:
 142 
 143    struct xfrm_aevent_id {
 144              struct xfrm_usersa_id           sa_id;
 145+             xfrm_address_t                  saddr;
 146              __u32                           flags;
 147+             __u32                           reqid;
 148    };
 149...
 150------------------------------------------------
 151
 152As you can see, a commit shows who made the latest change, what they
 153did, and why.
 154
 155Every commit has a 20-digit id, sometimes called the "SHA1 id", shown
 156on the first line of the "git show" output.  You can usually refer to
 157a commit by a shorter name, such as a tag or a branch name, but this
 158longer id can also be useful.  In particular, it is a globally unique
 159name for this commit: so if you tell somebody else the SHA1 id (for
 160example in email), then you are guaranteed they will see the same
 161commit in their repository that you do in yours.
 162
 163Understanding history: commits, parents, and reachability
 164~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 165
 166Every commit (except the very first commit in a project) also has a
 167parent commit which shows what happened before this commit.
 168Following the chain of parents will eventually take you back to the
 169beginning of the project.
 170
 171However, the commits do not form a simple list; git allows lines of
 172development to diverge and then reconverge, and the point where two
 173lines of development reconverge is called a "merge".  The commit
 174representing a merge can therefore have more than one parent, with
 175each parent representing the most recent commit on one of the lines
 176of development leading to that point.
 177
 178The best way to see how this works is using the gitlink:gitk[1]
 179command; running gitk now on a git repository and looking for merge
 180commits will help understand how the git organizes history.
 181
 182In the following, we say that commit X is "reachable" from commit Y
 183if commit X is an ancestor of commit Y.  Equivalently, you could say
 184that Y is a descendent of X, or that there is a chain of parents
 185leading from commit Y to commit X.
 186
 187Undestanding history: History diagrams
 188~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 189
 190We will sometimes represent git history using diagrams like the one
 191below.  Commits are shown as "o", and the links between them with
 192lines drawn with - / and \.  Time goes left to right:
 193
 194         o--o--o <-- Branch A
 195        /
 196 o--o--o <-- master
 197        \
 198         o--o--o <-- Branch B
 199
 200If we need to talk about a particular commit, the character "o" may
 201be replaced with another letter or number.
 202
 203Understanding history: What is a branch?
 204~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 205
 206Though we've been using the word "branch" to mean a kind of reference
 207to a particular commit, the word branch is also commonly used to
 208refer to the line of commits leading up to that point.  In the
 209example above, git may think of the branch named "A" as just a
 210pointer to one particular commit, but we may refer informally to the
 211line of three commits leading up to that point as all being part of
 212"branch A".
 213
 214If we need to make it clear that we're just talking about the most
 215recent commit on the branch, we may refer to that commit as the
 216"head" of the branch.
 217
 218Manipulating branches
 219---------------------
 220
 221Creating, deleting, and modifying branches is quick and easy; here's
 222a summary of the commands:
 223
 224git branch::
 225        list all branches
 226git branch <branch>::
 227        create a new branch named <branch>, referencing the same
 228        point in history as the current branch
 229git branch <branch> <start-point>::
 230        create a new branch named <branch>, referencing
 231        <start-point>, which may be specified any way you like,
 232        including using a branch name or a tag name
 233git branch -d <branch>::
 234        delete the branch <branch>; if the branch you are deleting
 235        points to a commit which is not reachable from this branch,
 236        this command will fail with a warning.
 237git branch -D <branch>::
 238        even if the branch points to a commit not reachable
 239        from the current branch, you may know that that commit
 240        is still reachable from some other branch or tag.  In that
 241        case it is safe to use this command to force git to delete
 242        the branch.
 243git checkout <branch>::
 244        make the current branch <branch>, updating the working
 245        directory to reflect the version referenced by <branch>
 246git checkout -b <new> <start-point>::
 247        create a new branch <new> referencing <start-point>, and
 248        check it out.
 249
 250It is also useful to know that the special symbol "HEAD" can always
 251be used to refer to the current branch.
 252
 253Examining branches from a remote repository
 254-------------------------------------------
 255
 256The "master" branch that was created at the time you cloned is a copy
 257of the HEAD in the repository that you cloned from.  That repository
 258may also have had other branches, though, and your local repository
 259keeps branches which track each of those remote branches, which you
 260can view using the "-r" option to gitlink:git-branch[1]:
 261
 262------------------------------------------------
 263$ git branch -r
 264  origin/HEAD
 265  origin/html
 266  origin/maint
 267  origin/man
 268  origin/master
 269  origin/next
 270  origin/pu
 271  origin/todo
 272------------------------------------------------
 273
 274You cannot check out these remote-tracking branches, but you can
 275examine them on a branch of your own, just as you would a tag:
 276
 277------------------------------------------------
 278$ git checkout -b my-todo-copy origin/todo
 279------------------------------------------------
 280
 281Note that the name "origin" is just the name that git uses by default
 282to refer to the repository that you cloned from.
 283
 284[[how-git-stores-references]]
 285How git stores references
 286-------------------------
 287
 288Branches, remote-tracking branches, and tags are all references to
 289commits.  Git stores these references in the ".git" directory.  Most
 290of them are stored in .git/refs/:
 291
 292        - branches are stored in .git/refs/heads
 293        - tags are stored in .git/refs/tags
 294        - remote-tracking branches for "origin" are stored in
 295          .git/refs/remotes/origin/
 296
 297If you look at one of these files you will see that they usually
 298contain just the SHA1 id of a commit:
 299
 300------------------------------------------------
 301$ ls .git/refs/heads/
 302master
 303$ cat .git/refs/heads/master
 304c0f982dcf188d55db9d932a39d4ea7becaa55fed
 305------------------------------------------------
 306
 307You can refer to a reference by its path relative to the .git
 308directory.  However, we've seen above that git will also accept
 309shorter names; for example, "master" is an acceptable shortcut for
 310"refs/heads/master", and "origin/master" is a shortcut for
 311"refs/remotes/origin/master".
 312
 313As another useful shortcut, you can also refer to the "HEAD" of
 314"origin" (or any other remote), using just the name of the remote.
 315
 316For the complete list of paths which git checks for references, and
 317how it decides which to choose when there are multiple references
 318with the same name, see the "SPECIFYING REVISIONS" section of
 319gitlink:git-rev-parse[1].
 320
 321[[Updating-a-repository-with-git-fetch]]
 322Updating a repository with git fetch
 323------------------------------------
 324
 325Eventually the developer cloned from will do additional work in her
 326repository, creating new commits and advancing the branches to point
 327at the new commits.
 328
 329The command "git fetch", with no arguments, will update all of the
 330remote-tracking branches to the latest version found in her
 331repository.  It will not touch any of your own branches--not even the
 332"master" branch that was created for you on clone.
 333
 334Fetching individual branches
 335----------------------------
 336
 337You can also choose to update just one branch at a time:
 338
 339-------------------------------------------------
 340$ git fetch origin todo:refs/remotes/origin/todo
 341-------------------------------------------------
 342
 343The first argument, "origin", just tells git to fetch from the
 344repository you originally cloned from.  The second argument tells git
 345to fetch the branch named "todo" from the remote repository, and to
 346store it locally under the name refs/remotes/origin/todo; as we saw
 347above, remote-tracking branches are stored under
 348refs/remotes/<name-of-repository>/<name-of-branch>.
 349
 350You can also fetch branches from other repositories; so
 351
 352-------------------------------------------------
 353$ git fetch git://example.com/proj.git master:refs/remotes/example/master
 354-------------------------------------------------
 355
 356will create a new reference named "refs/remotes/example/master" and
 357store in it the branch named "master" from the repository at the
 358given URL.  If you already have a branch named
 359"refs/remotes/example/master", it will attempt to "fast-forward" to
 360the commit given by example.com's master branch.  So next we explain
 361what a fast-forward is:
 362
 363[[fast-forwards]]
 364Understanding git history: fast-forwards
 365----------------------------------------
 366
 367In the previous example, when updating an existing branch, "git
 368fetch" checks to make sure that the most recent commit on the remote
 369branch is a descendant of the most recent commit on your copy of the
 370branch before updating your copy of the branch to point at the new
 371commit.  Git calls this process a "fast forward".
 372
 373A fast forward looks something like this:
 374
 375 o--o--o--o <-- old head of the branch
 376           \
 377            o--o--o <-- new head of the branch
 378
 379
 380In some cases it is possible that the new head will *not* actually be
 381a descendant of the old head.  For example, the developer may have
 382realized she made a serious mistake, and decided to backtrack,
 383resulting in a situation like:
 384
 385 o--o--o--o--a--b <-- old head of the branch
 386           \
 387            o--o--o <-- new head of the branch
 388
 389
 390
 391In this case, "git fetch" will fail, and print out a warning.
 392
 393In that case, you can still force git to update to the new head, as
 394described in the following section.  However, note that in the
 395situation above this may mean losing the commits labeled "a" and "b",
 396unless you've already created a reference of your own pointing to
 397them.
 398
 399Forcing git fetch to do non-fast-forward updates
 400------------------------------------------------
 401
 402If git fetch fails because the new head of a branch is not a
 403descendant of the old head, you may force the update with:
 404
 405-------------------------------------------------
 406$ git fetch git://example.com/proj.git +master:refs/remotes/example/master
 407-------------------------------------------------
 408
 409Note the addition of the "+" sign.  Be aware that commits which the
 410old version of example/master pointed at may be lost, as we saw in
 411the previous section.
 412
 413Configuring remote branches
 414---------------------------
 415
 416We saw above that "origin" is just a shortcut to refer to the
 417repository which you originally cloned from.  This information is
 418stored in git configuration variables, which you can see using
 419gitlink:git-repo-config[1]:
 420
 421-------------------------------------------------
 422$ git-repo-config -l
 423core.repositoryformatversion=0
 424core.filemode=true
 425core.logallrefupdates=true
 426remote.origin.url=git://git.kernel.org/pub/scm/git/git.git
 427remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
 428branch.master.remote=origin
 429branch.master.merge=refs/heads/master
 430-------------------------------------------------
 431
 432If there are other repositories that you also use frequently, you can
 433create similar configuration options to save typing; for example,
 434after
 435
 436-------------------------------------------------
 437$ git repo-config remote.example.url=git://example.com/proj.git
 438-------------------------------------------------
 439
 440then the following two commands will do the same thing:
 441
 442-------------------------------------------------
 443$ git fetch git://example.com/proj.git master:refs/remotes/example/master
 444$ git fetch example master:refs/remotes/example/master
 445-------------------------------------------------
 446
 447Even better, if you add one more option:
 448
 449-------------------------------------------------
 450$ git repo-config remote.example.fetch=master:refs/remotes/example/master
 451-------------------------------------------------
 452
 453then the following commands will all do the same thing:
 454
 455-------------------------------------------------
 456$ git fetch git://example.com/proj.git master:ref/remotes/example/master
 457$ git fetch example master:ref/remotes/example/master
 458$ git fetch example example/master
 459$ git fetch example
 460-------------------------------------------------
 461
 462You can also add a "+" to force the update each time:
 463
 464-------------------------------------------------
 465$ git repo-config +master:ref/remotes/example/master
 466-------------------------------------------------
 467
 468Don't do this unless you're sure you won't mind "git fetch" possibly
 469throwing away commits on mybranch.
 470
 471Also note that all of the above configuration can be performed by
 472directly editing the file .git/config instead of using
 473gitlink:git-repo-config[1].
 474
 475See gitlink:git-repo-config[1] for more details on the configuration
 476options mentioned above.
 477
 478Exploring git history
 479=====================
 480
 481Git is best thought of as a tool for storing the history of a
 482collection of files.  It does this by storing compressed snapshots of
 483the contents of a file heirarchy, together with "commits" which show
 484the relationships between these snapshots.
 485
 486Git provides extremely flexible and fast tools for exploring the
 487history of a project.
 488
 489We start with one specialized tool which is useful for finding the
 490commit that introduced a bug into a project.
 491
 492How to use bisect to find a regression
 493--------------------------------------
 494
 495Suppose version 2.6.18 of your project worked, but the version at
 496"master" crashes.  Sometimes the best way to find the cause of such a
 497regression is to perform a brute-force search through the project's
 498history to find the particular commit that caused the problem.  The
 499gitlink:git-bisect[1] command can help you do this:
 500
 501-------------------------------------------------
 502$ git bisect start
 503$ git bisect good v2.6.18
 504$ git bisect bad master
 505Bisecting: 3537 revisions left to test after this
 506[65934a9a028b88e83e2b0f8b36618fe503349f8e] BLOCK: Make USB storage depend on SCSI rather than selecting it [try #6]
 507-------------------------------------------------
 508
 509If you run "git branch" at this point, you'll see that git has
 510temporarily moved you to a new branch named "bisect".  This branch
 511points to a commit (with commit id 65934...) that is reachable from
 512v2.6.19 but not from v2.6.18.  Compile and test it, and see whether
 513it crashes.  Assume it does crash.  Then:
 514
 515-------------------------------------------------
 516$ git bisect bad
 517Bisecting: 1769 revisions left to test after this
 518[7eff82c8b1511017ae605f0c99ac275a7e21b867] i2c-core: Drop useless bitmaskings
 519-------------------------------------------------
 520
 521checks out an older version.  Continue like this, telling git at each
 522stage whether the version it gives you is good or bad, and notice
 523that the number of revisions left to test is cut approximately in
 524half each time.
 525
 526After about 13 tests (in this case), it will output the commit id of
 527the guilty commit.  You can then examine the commit with
 528gitlink:git-show[1], find out who wrote it, and mail them your bug
 529report with the commit id.  Finally, run
 530
 531-------------------------------------------------
 532$ git bisect reset
 533-------------------------------------------------
 534
 535to return you to the branch you were on before and delete the
 536temporary "bisect" branch.
 537
 538Note that the version which git-bisect checks out for you at each
 539point is just a suggestion, and you're free to try a different
 540version if you think it would be a good idea.  For example,
 541occasionally you may land on a commit that broke something unrelated;
 542run
 543
 544-------------------------------------------------
 545$ git bisect-visualize
 546-------------------------------------------------
 547
 548which will run gitk and label the commit it chose with a marker that
 549says "bisect".  Chose a safe-looking commit nearby, note its commit
 550id, and check it out with:
 551
 552-------------------------------------------------
 553$ git reset --hard fb47ddb2db...
 554-------------------------------------------------
 555
 556then test, run "bisect good" or "bisect bad" as appropriate, and
 557continue.
 558
 559Naming commits
 560--------------
 561
 562We have seen several ways of naming commits already:
 563
 564        - 20-digit SHA1 id
 565        - branch name: refers to the commit at the head of the given
 566          branch
 567        - tag name: refers to the commit pointed to by the given tag
 568          (we've seen branches and tags are special cases of
 569          <<how-git-stores-references,references>>).
 570        - HEAD: refers to the head of the current branch
 571
 572There are many more; see the "SPECIFYING REVISION" section of the
 573gitlink:git-rev-list[1] man page for the complete list of ways to
 574name revisions.  Some examples:
 575
 576-------------------------------------------------
 577$ git show fb47ddb2 # the first few characters of the SHA1 id
 578                    # are usually enough to specify it uniquely
 579$ git show HEAD^    # the parent of the HEAD commit
 580$ git show HEAD^^   # the grandparent
 581$ git show HEAD~4   # the great-great-grandparent
 582-------------------------------------------------
 583
 584Recall that merge commits may have more than one parent; by default,
 585^ and ~ follow the first parent listed in the commit, but you can
 586also choose:
 587
 588-------------------------------------------------
 589$ git show HEAD^1   # show the first parent of HEAD
 590$ git show HEAD^2   # show the second parent of HEAD
 591-------------------------------------------------
 592
 593In addition to HEAD, there are several other special names for
 594commits:
 595
 596Merges (to be discussed later), as well as operations such as
 597git-reset, which change the currently checked-out commit, generally
 598set ORIG_HEAD to the value HEAD had before the current operation.
 599
 600The git-fetch operation always stores the head of the last fetched
 601branch in FETCH_HEAD.  For example, if you run git fetch without
 602specifying a local branch as the target of the operation
 603
 604-------------------------------------------------
 605$ git fetch git://example.com/proj.git theirbranch
 606-------------------------------------------------
 607
 608the fetched commits will still be available from FETCH_HEAD.
 609
 610When we discuss merges we'll also see the special name MERGE_HEAD,
 611which refers to the other branch that we're merging in to the current
 612branch.
 613
 614Creating tags
 615-------------
 616
 617We can also create a tag to refer to a particular commit; after
 618running
 619
 620-------------------------------------------------
 621$ git-tag stable-1 1b2e1d63ff
 622-------------------------------------------------
 623
 624You can use stable-1 to refer to the commit 1b2e1d63ff.
 625
 626This creates a "lightweight" tag.  If the tag is a tag you wish to
 627share with others, and possibly sign cryptographically, then you
 628should create a tag object instead; see the gitlink:git-tag[1] man
 629page for details.
 630
 631Browsing revisions
 632------------------
 633
 634The gitlink:git-log[1] command can show lists of commits.  On its
 635own, it shows all commits reachable from the parent commit; but you
 636can also make more specific requests:
 637
 638-------------------------------------------------
 639$ git log v2.5..        # commits since (not reachable from) v2.5
 640$ git log test..master  # commits reachable from master but not test
 641$ git log master..test  # ...reachable from test but not master
 642$ git log master...test # ...reachable from either test or master,
 643                        #    but not both
 644$ git log --since="2 weeks ago" # commits from the last 2 weeks
 645$ git log Makefile      # commits which modify Makefile
 646$ git log fs/           # ... which modify any file under fs/
 647$ git log -S'foo()'     # commits which add or remove any file data
 648                        # matching the string 'foo()'
 649-------------------------------------------------
 650
 651And of course you can combine all of these; the following finds
 652commits since v2.5 which touch the Makefile or any file under fs:
 653
 654-------------------------------------------------
 655$ git log v2.5.. Makefile fs/
 656-------------------------------------------------
 657
 658You can also ask git log to show patches:
 659
 660-------------------------------------------------
 661$ git log -p
 662-------------------------------------------------
 663
 664See the "--pretty" option in the gitlink:git-log[1] man page for more
 665display options.
 666
 667Note that git log starts with the most recent commit and works
 668backwards through the parents; however, since git history can contain
 669multiple independant lines of development, the particular order that
 670commits are listed in may be somewhat arbitrary.
 671
 672Generating diffs
 673----------------
 674
 675You can generate diffs between any two versions using
 676gitlink:git-diff[1]:
 677
 678-------------------------------------------------
 679$ git diff master..test
 680-------------------------------------------------
 681
 682Sometimes what you want instead is a set of patches:
 683
 684-------------------------------------------------
 685$ git format-patch master..test
 686-------------------------------------------------
 687
 688will generate a file with a patch for each commit reachable from test
 689but not from master.  Note that if master also has commits which are
 690not reachable from test, then the combined result of these patches
 691will not be the same as the diff produced by the git-diff example.
 692
 693Viewing old file versions
 694-------------------------
 695
 696You can always view an old version of a file by just checking out the
 697correct revision first.  But sometimes it is more convenient to be
 698able to view an old version of a single file without checking
 699anything out; this command does that:
 700
 701-------------------------------------------------
 702$ git show v2.5:fs/locks.c
 703-------------------------------------------------
 704
 705Before the colon may be anything that names a commit, and after it
 706may be any path to a file tracked by git.
 707
 708Developing with git
 709===================
 710
 711Telling git your name
 712---------------------
 713
 714Before creating any commits, you should introduce yourself to git.  The
 715easiest way to do so is:
 716
 717------------------------------------------------
 718$ cat >~/.gitconfig <<\EOF
 719[user]
 720        name = Your Name Comes Here
 721        email = you@yourdomain.example.com
 722EOF
 723------------------------------------------------
 724
 725
 726Creating a new repository
 727-------------------------
 728
 729Creating a new repository from scratch is very easy:
 730
 731-------------------------------------------------
 732$ mkdir project
 733$ cd project
 734$ git init-db
 735-------------------------------------------------
 736
 737If you have some initial content (say, a tarball):
 738
 739-------------------------------------------------
 740$ tar -xzvf project.tar.gz
 741$ cd project
 742$ git init-db
 743$ git add . # include everything below ./ in the first commit:
 744$ git commit
 745-------------------------------------------------
 746
 747[[how-to-make-a-commit]]
 748how to make a commit
 749--------------------
 750
 751Creating a new commit takes three steps:
 752
 753        1. Making some changes to the working directory using your
 754           favorite editor.
 755        2. Telling git about your changes.
 756        3. Creating the commit using the content you told git about
 757           in step 2.
 758
 759In practice, you can interleave and repeat steps 1 and 2 as many
 760times as you want: in order to keep track of what you want committed
 761at step 3, git maintains a snapshot of the tree's contents in a
 762special staging area called "the index."
 763
 764By default, the content of the index is identical to that of the
 765HEAD.  The command "git diff --cached" shows the difference between
 766HEAD and the index, so you should no output from that command.
 767
 768Modifying the index is easy:
 769
 770To update the index with the new contents of a modified file, use
 771
 772-------------------------------------------------
 773$ git add path/to/file
 774-------------------------------------------------
 775
 776To add the contents of a new file to the index, use
 777
 778-------------------------------------------------
 779$ git add path/to/file
 780-------------------------------------------------
 781
 782To remove a file from the index that you've removed from the working
 783tree,
 784
 785-------------------------------------------------
 786$ git rm path/to/file
 787-------------------------------------------------
 788
 789After each step you can verify that
 790
 791-------------------------------------------------
 792$ git diff --cached
 793-------------------------------------------------
 794
 795always shows the difference between the HEAD and the index file--this
 796is what you'd commit if you created the commit now--and that
 797
 798-------------------------------------------------
 799$ git diff
 800-------------------------------------------------
 801
 802shows the difference between the working tree and the index file.
 803
 804Note that "git add" always adds just the current contents of a file
 805to the index; further changes to the same file will be ignored unless
 806you run git-add on the file again.
 807
 808When you're ready, just run
 809
 810-------------------------------------------------
 811$ git commit
 812-------------------------------------------------
 813
 814and git will prompt you for a commit message and then create the new
 815commmit.  Check to make sure it looks like what you expected with
 816
 817-------------------------------------------------
 818$ git show
 819-------------------------------------------------
 820
 821As a special shortcut,
 822                
 823-------------------------------------------------
 824$ git commit -a
 825-------------------------------------------------
 826
 827will update the index with any files that you've modified or removed
 828and create a commit, all in one step.
 829
 830A number of commands are useful for keeping track of what you're
 831about to commit:
 832
 833-------------------------------------------------
 834$ git diff --cached # difference between HEAD and the index; what
 835                    # would be commited if you ran "commit" now.
 836$ git diff          # difference between the index file and your
 837                    # working directory; changes that would not
 838                    # be included if you ran "commit" now.
 839$ git status        # a brief per-file summary of the above.
 840-------------------------------------------------
 841
 842creating good commit messages
 843-----------------------------
 844
 845Though not required, it's a good idea to begin the commit message
 846with a single short (less than 50 character) line summarizing the
 847change, followed by a blank line and then a more thorough
 848description.  Tools that turn commits into email, for example, use
 849the first line on the Subject line and the rest of the commit in the
 850body.
 851
 852how to merge
 853------------
 854
 855You can rejoin two diverging branches of development using
 856gitlink:git-merge[1]:
 857
 858-------------------------------------------------
 859$ git merge branchname
 860-------------------------------------------------
 861
 862merges the development in the branch "branchname" into the current
 863branch.  If there are conflicts--for example, if the same file is
 864modified in two different ways in the remote branch and the local
 865branch--then you are warned; the output may look something like this:
 866
 867-------------------------------------------------
 868$ git pull . next
 869Trying really trivial in-index merge...
 870fatal: Merge requires file-level merging
 871Nope.
 872Merging HEAD with 77976da35a11db4580b80ae27e8d65caf5208086
 873Merging:
 87415e2162 world
 87577976da goodbye
 876found 1 common ancestor(s):
 877d122ed4 initial
 878Auto-merging file.txt
 879CONFLICT (content): Merge conflict in file.txt
 880Automatic merge failed; fix conflicts and then commit the result.
 881-------------------------------------------------
 882
 883Conflict markers are left in the problematic files, and after
 884you resolve the conflicts manually, you can update the index
 885with the contents and run git commit, as you normally would when
 886creating a new file.
 887
 888If you examine the resulting commit using gitk, you will see that it
 889has two parents, one pointing to the top of the current branch, and
 890one to the top of the other branch.
 891
 892In more detail:
 893
 894[[resolving-a-merge]]
 895Resolving a merge
 896-----------------
 897
 898When a merge isn't resolved automatically, git leaves the index and
 899the working tree in a special state that gives you all the
 900information you need to help resolve the merge.
 901
 902Files with conflicts are marked specially in the index, so until you
 903resolve the problem and update the index, git commit will fail:
 904
 905-------------------------------------------------
 906$ git commit
 907file.txt: needs merge
 908-------------------------------------------------
 909
 910Also, git status will list those files as "unmerged".
 911
 912All of the changes that git was able to merge automatically are
 913already added to the index file, so gitlink:git-diff[1] shows only
 914the conflicts.  Also, it uses a somewhat unusual syntax:
 915
 916-------------------------------------------------
 917$ git diff
 918diff --cc file.txt
 919index 802992c,2b60207..0000000
 920--- a/file.txt
 921+++ b/file.txt
 922@@@ -1,1 -1,1 +1,5 @@@
 923++<<<<<<< HEAD:file.txt
 924 +Hello world
 925++=======
 926+ Goodbye
 927++>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
 928-------------------------------------------------
 929
 930Recall that the commit which will be commited after we resolve this
 931conflict will have two parents instead of the usual one: one parent
 932will be HEAD, the tip of the current branch; the other will be the
 933tip of the other branch, which is stored temporarily in MERGE_HEAD.
 934
 935The diff above shows the differences between the working-tree version
 936of file.txt and two previous version: one version from HEAD, and one
 937from MERGE_HEAD.  So instead of preceding each line by a single "+"
 938or "-", it now uses two columns: the first column is used for
 939differences between the first parent and the working directory copy,
 940and the second for differences between the second parent and the
 941working directory copy.  Thus after resolving the conflict in the
 942obvious way, the diff will look like:
 943
 944-------------------------------------------------
 945$ git diff
 946diff --cc file.txt
 947index 802992c,2b60207..0000000
 948--- a/file.txt
 949+++ b/file.txt
 950@@@ -1,1 -1,1 +1,1 @@@
 951- Hello world
 952 -Goodbye
 953++Goodbye world
 954-------------------------------------------------
 955
 956This shows that our resolved version deleted "Hello world" from the
 957first parent, deleted "Goodbye" from the second parent, and added
 958"Goodbye world", which was previously absent from both.
 959
 960The gitlink:git-log[1] command also provides special help for merges:
 961
 962-------------------------------------------------
 963$ git log --merge
 964-------------------------------------------------
 965
 966This will list all commits which exist only on HEAD or on MERGE_HEAD,
 967and which touch an unmerged file.
 968
 969We can now add the resolved version to the index and commit:
 970
 971-------------------------------------------------
 972$ git add file.txt
 973$ git commit
 974-------------------------------------------------
 975
 976Note that the commit message will already be filled in for you with
 977some information about the merge.  Normally you can just use this
 978default message unchanged, but you may add additional commentary of
 979your own if desired.
 980
 981[[undoing-a-merge]]
 982undoing a merge
 983---------------
 984
 985If you get stuck and decide to just give up and throw the whole mess
 986away, you can always return to the pre-merge state with
 987
 988-------------------------------------------------
 989$ git reset --hard HEAD
 990-------------------------------------------------
 991
 992Or, if you've already commited the merge that you want to throw away,
 993
 994-------------------------------------------------
 995$ git reset --hard HEAD^
 996-------------------------------------------------
 997
 998However, this last command can be dangerous in some cases--never
 999throw away a commit you have already committed if that commit may
1000itself have been merged into another branch, as doing so may confuse
1001further merges.
1002
1003Fast-forward merges
1004-------------------
1005
1006There is one special case not mentioned above, which is treated
1007differently.  Normally, a merge results in a merge commit, with two
1008parents, one pointing at each of the two lines of development that
1009were merged.
1010
1011However, if one of the two lines of development is completely
1012contained within the other--so every commit present in the one is
1013already contained in the other--then git just performs a
1014<<fast-forwards,fast forward>>; the head of the current branch is
1015moved forward to point at the head of the merged-in branch, without
1016any new commits being created.
1017
1018Ensuring good performance
1019-------------------------
1020
1021On large repositories, git depends on compression to keep the history
1022information from taking up to much space on disk or in memory.
1023
1024This compression is not performed automatically.  Therefore you
1025should occasionally run
1026
1027-------------------------------------------------
1028$ git gc
1029-------------------------------------------------
1030
1031to recompress the archive and to prune any commits which are no
1032longer referred to anywhere.  This can be very time-consuming, and
1033you should not modify the repository while it is working, so you
1034should run it while you are not working.
1035
1036Sharing development with others
1037-------------------------------
1038
1039[[getting-updates-with-git-pull]]
1040Getting updates with git pull
1041~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1042
1043After you clone a repository and make a few changes of your own, you
1044may wish to check the original repository for updates and merge them
1045into your own work.
1046
1047We have already seen <<Updating-a-repository-with-git-fetch,how to
1048keep remote tracking branches up to date>> with gitlink:git-fetch[1],
1049and how to merge two branches.  So you can merge in changes from the
1050original repository's master branch with:
1051
1052-------------------------------------------------
1053$ git fetch
1054$ git merge origin/master
1055-------------------------------------------------
1056
1057However, the gitlink:git-pull[1] command provides a way to do this in
1058one step:
1059
1060-------------------------------------------------
1061$ git pull origin master
1062-------------------------------------------------
1063
1064In fact, "origin" is normally the default repository to pull from,
1065and the default branch is normally the HEAD of the remote repository,
1066so often you can accomplish the above with just
1067
1068-------------------------------------------------
1069$ git pull
1070-------------------------------------------------
1071
1072See the descriptions of the branch.<name>.remote and
1073branch.<name>.merge options in gitlink:git-repo-config[1] to learn
1074how to control these defaults depending on the current branch.
1075
1076In addition to saving you keystrokes, "git pull" also helps you by
1077producing a default commit message documenting the branch and
1078repository that you pulled from.
1079
1080(But note that no such commit will be created in the case of a
1081<<fast-forwards,fast forward>>; instead, your branch will just be
1082updated to point to the latest commit from the upstream branch).
1083
1084Submitting patches to a project
1085~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1086
1087If you just have a few changes, the simplest way to submit them may
1088just be to send them as patches in email:
1089
1090First, use gitlink:git-format-patches[1]; for example:
1091
1092-------------------------------------------------
1093$ git format-patches origin
1094-------------------------------------------------
1095
1096will produce a numbered series of files in the current directory, one
1097for each patch in the current branch but not in origin/HEAD.
1098
1099You can then import these into your mail client and send them by
1100hand.  However, if you have a lot to send at once, you may prefer to
1101use the gitlink:git-send-email[1] script to automate the process.
1102Consult the mailing list for your project first to determine how they
1103prefer such patches be handled.
1104
1105Importing patches to a project
1106~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1107
1108Git also provides a tool called gitlink:git-am[1] (am stands for
1109"apply mailbox"), for importing such an emailed series of patches.
1110Just save all of the patch-containing messages, in order, into a
1111single mailbox file, say "patches.mbox", then run
1112
1113-------------------------------------------------
1114$ git am patches.mbox
1115-------------------------------------------------
1116
1117Git will apply each patch in order; if any conflicts are found, it
1118will stop, and you can fix the conflicts as described in
1119"<<resolving-a-merge,Resolving a merge>>".  Once the index is updated
1120with the results of the conflict resolution, instead of creating a
1121new commit, just run
1122
1123-------------------------------------------------
1124$ git am --resolved
1125-------------------------------------------------
1126
1127and git will create the commit for you and continue applying the
1128remaining patches from the mailbox.
1129
1130The final result will be a series of commits, one for each patch in
1131the original mailbox, with authorship and commit log message each
1132taken from the message containing each patch.
1133
1134[[setting-up-a-public-repository]]
1135Setting up a public repository
1136~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1137
1138Another way to submit changes to a project is to simply tell the
1139maintainer of that project to pull from your repository, exactly as
1140you did in the section "<<getting-updates-with-git-pull, Getting
1141updates with git pull>>".
1142
1143If you and maintainer both have accounts on the same machine, then
1144then you can just pull changes from each other's repositories
1145directly; note that all of the command (gitlink:git-clone[1],
1146git-fetch[1], git-pull[1], etc.) which accept a URL as an argument
1147will also accept a local file patch; so, for example, you can
1148use
1149
1150-------------------------------------------------
1151$ git clone /path/to/repository
1152$ git pull /path/to/other/repository
1153-------------------------------------------------
1154
1155If this sort of setup is inconvenient or impossible, another (more
1156common) option is to set up a public repository on a public server.
1157This also allows you to cleanly separate private work in progress
1158from publicly visible work.
1159
1160You will continue to do your day-to-day work in your personal
1161repository, but periodically "push" changes from your personal
1162repository into your public repository, allowing other developers to
1163pull from that repository.  So the flow of changes, in a situation
1164where there is one other developer with a public repository, looks
1165like this:
1166
1167                        you push
1168  your personal repo ------------------> your public repo
1169        ^                                     |
1170        |                                     |
1171        | you pull                            | they pull
1172        |                                     |
1173        |                                     |
1174        |               they push             V
1175  their public repo <------------------- their repo
1176
1177Now, assume your personal repository is in the directory ~/proj.  We
1178first create a new clone of the repository:
1179
1180-------------------------------------------------
1181$ git clone --bare proj-clone.git
1182-------------------------------------------------
1183
1184The resulting directory proj-clone.git will contains a "bare" git
1185repository--it is just the contents of the ".git" directory, without
1186a checked-out copy of a working directory.
1187
1188Next, copy proj-clone.git to the server where you plan to host the
1189public repository.  You can use scp, rsync, or whatever is most
1190convenient.
1191
1192If somebody else maintains the public server, they may already have
1193set up a git service for you, and you may skip to the section
1194"<<pushing-changes-to-a-public-repository,Pushing changes to a public
1195repository>>", below.
1196
1197Otherwise, the following sections explain how to export your newly
1198created public repository:
1199
1200[[exporting-via-http]]
1201Exporting a git repository via http
1202~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1203
1204The git protocol gives better performance and reliability, but on a
1205host with a web server set up, http exports may be simpler to set up.
1206
1207All you need to do is place the newly created bare git repository in
1208a directory that is exported by the web server, and make some
1209adjustments to give web clients some extra information they need:
1210
1211-------------------------------------------------
1212$ mv proj.git /home/you/public_html/proj.git
1213$ cd proj.git
1214$ git update-server-info
1215$ chmod a+x hooks/post-update
1216-------------------------------------------------
1217
1218(For an explanation of the last two lines, see
1219gitlink:git-update-server-info[1], and the documentation
1220link:hooks.txt[Hooks used by git].)
1221
1222Advertise the url of proj.git.  Anybody else should then be able to
1223clone or pull from that url, for example with a commandline like:
1224
1225-------------------------------------------------
1226$ git clone http://yourserver.com/~you/proj.git
1227-------------------------------------------------
1228
1229(See also
1230link:howto/setup-git-server-over-http.txt[setup-git-server-over-http]
1231for a slightly more sophisticated setup using WebDAV which also
1232allows pushing over http.)
1233
1234[[exporting-via-git]]
1235Exporting a git repository via the git protocol
1236~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1237
1238This is the preferred method.
1239
1240For now, we refer you to the gitlink:git-daemon[1] man page for
1241instructions.  (See especially the examples section.)
1242
1243[[pushing-changes-to-a-public-repository]]
1244Pushing changes to a public repository
1245~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1246
1247Note that the two techniques outline above (exporting via
1248<<exporting-via-http,http>> or <<exporting-via-git,git>>) allow other
1249maintainers to fetch your latest changes, but they do not allow write
1250access, which you will need to update the public repository with the
1251latest changes created in your private repository.
1252
1253The simplest way to do this is using gitlink:git-push[1] and ssh; to
1254update the remote branch named "master" with the latest state of your
1255branch named "master", run
1256
1257-------------------------------------------------
1258$ git push ssh://yourserver.com/~you/proj.git master:master
1259-------------------------------------------------
1260
1261or just
1262
1263-------------------------------------------------
1264$ git push ssh://yourserver.com/~you/proj.git master
1265-------------------------------------------------
1266
1267As with git-fetch, git-push will complain if this does not result in
1268a <<fast-forwards,fast forward>>.  Normally this is a sign of
1269something wrong.  However, if you are sure you know what you're
1270doing, you may force git-push to perform the update anyway by
1271proceeding the branch name by a plus sign:
1272
1273-------------------------------------------------
1274$ git push ssh://yourserver.com/~you/proj.git +master
1275-------------------------------------------------
1276
1277As with git-fetch, you may also set up configuration options to
1278save typing; so, for example, after
1279
1280-------------------------------------------------
1281$ cat >.git/config <<EOF
1282[remote "public-repo"]
1283        url = ssh://yourserver.com/~you/proj.git
1284EOF
1285-------------------------------------------------
1286
1287you should be able to perform the above push with just
1288
1289-------------------------------------------------
1290$ git push public-repo master
1291-------------------------------------------------
1292
1293See the explanations of the remote.<name>.url, branch.<name>.remote,
1294and remote.<name>.push options in gitlink:git-repo-config[1] for
1295details.
1296
1297Setting up a shared repository
1298~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1299
1300Another way to collaborate is by using a model similar to that
1301commonly used in CVS, where several developers with special rights
1302all push to and pull from a single shared repository.  See
1303link:cvs-migration.txt[git for CVS users] for instructions on how to
1304set this up.
1305
1306Fixing mistakes
1307---------------
1308
1309If you've messed up the working tree, but haven't yet committed your
1310mistake, you can return the entire working tree to the last committed
1311state with
1312
1313-------------------------------------------------
1314$ git reset --hard HEAD
1315-------------------------------------------------
1316
1317If you make a commit that you later wish you hadn't, there are two
1318fundamentally different ways to fix the problem:
1319
1320        1. You can create a new commit that undoes whatever was done
1321        by the previous commit.  This is the correct thing if your
1322        mistake has already been made public.
1323
1324        2. You can go back and modify the old commit.  You should
1325        never do this if you have already made the history public;
1326        git does not normally expect the "history" of a project to
1327        change, and cannot correctly perform repeated merges from
1328        a branch that has had its history changed.
1329
1330Fixing a mistake with a new commit
1331~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1332
1333Creating a new commit that reverts an earlier change is very easy;
1334just pass the gitlink:git-revert[1] command a reference to the bad
1335commit; for example, to revert the most recent commit:
1336
1337-------------------------------------------------
1338$ git revert HEAD
1339-------------------------------------------------
1340
1341This will create a new commit which undoes the change in HEAD.  You
1342will be given a chance to edit the commit message for the new commit.
1343
1344You can also revert an earlier change, for example, the next-to-last:
1345
1346-------------------------------------------------
1347$ git revert HEAD^
1348-------------------------------------------------
1349
1350In this case git will attempt to undo the old change while leaving
1351intact any changes made since then.  If more recent changes overlap
1352with the changes to be reverted, then you will be asked to fix
1353conflicts manually, just as in the case of <<resolving-a-merge,
1354resolving a merge>>.
1355
1356Fixing a mistake by editing history
1357~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1358
1359If the problematic commit is the most recent commit, and you have not
1360yet made that commit public, then you may just
1361<<undoing-a-merge,destroy it using git-reset>>.
1362
1363Alternatively, you
1364can edit the working directory and update the index to fix your
1365mistake, just as if you were going to <<how-to-make-a-commit,create a
1366new commit>>, then run
1367
1368-------------------------------------------------
1369$ git commit --amend
1370-------------------------------------------------
1371
1372which will replace the old commit by a new commit incorporating your
1373changes, giving you a chance to edit the old commit message first.
1374
1375Again, you should never do this to a commit that may already have
1376been merged into another branch; use gitlink:git-revert[1] instead in
1377that case.
1378
1379It is also possible to edit commits further back in the history, but
1380this is an advanced topic to be left for
1381<<cleaning-up-history,another chapter>>.
1382
1383Checking out an old version of a file
1384~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1385
1386In the process of undoing a previous bad change, you may find it
1387useful to check out an older version of a particular file using
1388gitlink:git-checkout[1].  We've used git checkout before to switch
1389branches, but it has quite different behavior if it is given a path
1390name: the command
1391
1392-------------------------------------------------
1393$ git checkout HEAD^ path/to/file
1394-------------------------------------------------
1395
1396replaces path/to/file by the contents it had in the commit HEAD^, and
1397also updates the index to match.  It does not change branches.
1398
1399If you just want to look at an old version of the file, without
1400modifying the working directory, you can do that with
1401gitlink:git-show[1]:
1402
1403-------------------------------------------------
1404$ git show HEAD^ path/to/file
1405-------------------------------------------------
1406
1407which will display the given version of the file.
1408
1409Working with other version control systems
1410==========================================
1411
1412TODO: CVS, Subversion, ?
1413
1414[[cleaning-up-history]]
1415Cleaning up history: rebasing, cherry-picking, and patch series
1416===============================================================
1417
1418TODO: rebase, cherry-pick, pointers to other tools (like stgit)
1419
1420Git internals
1421=============
1422
1423Architectural overview
1424----------------------
1425
1426TODO: Sources, README, core-tutorial, tutorial-2.txt, technical/
1427
1428Glossary of git terms
1429=====================
1430
1431include::glossary.txt[]
1432
1433Todo list for this manual
1434=========================
1435
1436Scan Documentation/ for other stuff left out; in particular:
1437        howto's
1438        README
1439        some of technical/?
1440        hooks
1441        etc.
1442
1443Scan email archives for other stuff left out
1444
1445Scan man pages to see if any assume more background than this manual
1446provides.
1447
1448Mention of gitweb.
1449
1450Update git fetch discussion to use "git remote" setup.  That will
1451make things simpler.  Maybe wait till git remote is done.
1452
1453Can also simplify beginning by suggesting disconnected head instead
1454of temporary branch creation.
1455
1456Explain how to refer to file stages in the "how to resolve a merge"
1457section: diff -1, -2, -3; :1:/path notation.
1458
1459Include cross-references to the glossary, where appropriate.
1460