Git User's Manual (for version 1.5.3 or newer)
______________________________________________


Git is a fast distributed revision control system.

This manual is designed to be readable by someone with basic UNIX
command-line skills, but no previous knowledge of git.

<<repositories-and-branches>> and <<exploring-git-history>> explain how
to fetch and study a project using git--read these chapters to learn how
to build and test a particular version of a software project, search for
regressions, and so on.

People needing to do actual development will also want to read
<<Developing-With-git>> and <<sharing-development>>.

Further chapters cover more specialized topics.

Comprehensive reference documentation is available through the man
pages, or linkgit:git-help[1] command.  For example, for the command
"git clone <repo>", you can either use:

------------------------------------------------
$ man git-clone
------------------------------------------------

or:

------------------------------------------------
$ git help clone
------------------------------------------------

With the latter, you can use the manual viewer of your choice; see
linkgit:git-help[1] for more information.

See also <<git-quick-start>> for a brief overview of git commands,
without any explanation.

Finally, see <<todo>> for ways that you can help make this manual more
complete.


[[repositories-and-branches]]
Repositories and Branches
=========================

[[how-to-get-a-git-repository]]
How to get a git repository
---------------------------

It will be useful to have a git repository to experiment with as you
read this manual.

The best way to get one is by using the linkgit:git-clone[1] command to
download a copy of an existing repository.  If you don't already have a
project in mind, here are some interesting examples:

------------------------------------------------
	# git itself (approx. 10MB download):
$ git clone git://git.kernel.org/pub/scm/git/git.git
	# the Linux kernel (approx. 150MB download):
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
------------------------------------------------

The initial clone may be time-consuming for a large project, but you
will only need to clone once.

The clone command creates a new directory named after the project ("git"
or "linux-2.6" in the examples above).  After you cd into this
directory, you will see that it contains a copy of the project files,
called the <<def_working_tree,working tree>>, together with a special
top-level directory named ".git", which contains all the information
about the history of the project.

[[how-to-check-out]]
How to check out a different version of a project
-------------------------------------------------

Git is best thought of as a tool for storing the history of a collection
of files.  It stores the history as a compressed collection of
interrelated snapshots of the project's contents.  In git each such
version is called a <<def_commit,commit>>.

Those snapshots aren't necessarily all arranged in a single line from
oldest to newest; instead, work may simultaneously proceed along
parallel lines of development, called <<def_branch,branches>>, which may
merge and diverge.

A single git repository can track development on multiple branches.  It
does this by keeping a list of <<def_head,heads>> which reference the
latest commit on each branch; the linkgit:git-branch[1] command shows
you the list of branch heads:

------------------------------------------------
$ git branch
* master
------------------------------------------------

A freshly cloned repository contains a single branch head, by default
named "master", with the working directory initialized to the state of
the project referred to by that branch head.

Most projects also use <<def_tag,tags>>.  Tags, like heads, are
references into the project's history, and can be listed using the
linkgit:git-tag[1] command:

------------------------------------------------
$ git tag -l
v2.6.11
v2.6.11-tree
v2.6.12
v2.6.12-rc2
v2.6.12-rc3
v2.6.12-rc4
v2.6.12-rc5
v2.6.12-rc6
v2.6.13
...
------------------------------------------------

Tags are expected to always point at the same version of a project,
while heads are expected to advance as development progresses.

Create a new branch head pointing to one of these versions and check it
out using linkgit:git-checkout[1]:

------------------------------------------------
$ git checkout -b new v2.6.13
------------------------------------------------

The working directory then reflects the contents that the project had
when it was tagged v2.6.13, and linkgit:git-branch[1] shows two
branches, with an asterisk marking the currently checked-out branch:

------------------------------------------------
$ git branch
  master
* new
------------------------------------------------

If you decide that you'd rather see version 2.6.17, you can modify
the current branch to point at v2.6.17 instead, with

------------------------------------------------
$ git reset --hard v2.6.17
------------------------------------------------

Note that if the current branch head was your only reference to a
particular point in history, then resetting that branch may leave you
with no way to find the history it used to point to; so use this command
carefully.

[[understanding-commits]]
Understanding History: Commits
------------------------------

Every change in the history of a project is represented by a commit.
The linkgit:git-show[1] command shows the most recent commit on the
current branch:

------------------------------------------------
$ git show
commit 17cf781661e6d38f737f15f53ab552f1e95960d7
Author: Linus Torvalds <torvalds@ppc970.osdl.org.(none)>
Date:   Tue Apr 19 14:11:06 2005 -0700

    Remove duplicate getenv(DB_ENVIRONMENT) call

    Noted by Tony Luck.

diff --git a/init-db.c b/init-db.c
index 65898fa..b002dc6 100644
--- a/init-db.c
+++ b/init-db.c
@@ -7,7 +7,7 @@
 
 int main(int argc, char **argv)
 {
-	char *sha1_dir = getenv(DB_ENVIRONMENT), *path;
+	char *sha1_dir, *path;
 	int len, i;
 
 	if (mkdir(".git", 0755) < 0) {
------------------------------------------------

As you can see, a commit shows who made the latest change, what they
did, and why.

Every commit has a 40-hexdigit id, sometimes called the "object name" or the
"SHA1 id", shown on the first line of the "git show" output.  You can usually
refer to a commit by a shorter name, such as a tag or a branch name, but this
longer name can also be useful.  Most importantly, it is a globally unique
name for this commit: so if you tell somebody else the object name (for
example in email), then you are guaranteed that name will refer to the same
commit in their repository that it does in yours (assuming their repository
has that commit at all).  Since the object name is computed as a hash over the
contents of the commit, you are guaranteed that the commit can never change
without its name also changing.

In fact, in <<git-concepts>> we shall see that everything stored in git
history, including file data and directory contents, is stored in an object
with a name that is a hash of its contents.

[[understanding-reachability]]
Understanding history: commits, parents, and reachability
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Every commit (except the very first commit in a project) also has a
parent commit which shows what happened before this commit.
Following the chain of parents will eventually take you back to the
beginning of the project.

However, the commits do not form a simple list; git allows lines of
development to diverge and then reconverge, and the point where two
lines of development reconverge is called a "merge".  The commit
representing a merge can therefore have more than one parent, with
each parent representing the most recent commit on one of the lines
of development leading to that point.

The best way to see how this works is using the linkgit:gitk[1]
command; running gitk now on a git repository and looking for merge
commits will help understand how the git organizes history.

In the following, we say that commit X is "reachable" from commit Y
if commit X is an ancestor of commit Y.  Equivalently, you could say
that Y is a descendant of X, or that there is a chain of parents
leading from commit Y to commit X.

[[history-diagrams]]
Understanding history: History diagrams
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

We will sometimes represent git history using diagrams like the one
below.  Commits are shown as "o", and the links between them with
lines drawn with - / and \.  Time goes left to right:


................................................
         o--o--o <-- Branch A
        /
 o--o--o <-- master
        \
         o--o--o <-- Branch B
................................................

If we need to talk about a particular commit, the character "o" may
be replaced with another letter or number.

[[what-is-a-branch]]
Understanding history: What is a branch?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

When we need to be precise, we will use the word "branch" to mean a line
of development, and "branch head" (or just "head") to mean a reference
to the most recent commit on a branch.  In the example above, the branch
head named "A" is a pointer to one particular commit, but we refer to
the line of three commits leading up to that point as all being part of
"branch A".

However, when no confusion will result, we often just use the term
"branch" both for branches and for branch heads.

[[manipulating-branches]]
Manipulating branches
---------------------

Creating, deleting, and modifying branches is quick and easy; here's
a summary of the commands:

git branch::
	list all branches
git branch <branch>::
	create a new branch named <branch>, referencing the same
	point in history as the current branch
git branch <branch> <start-point>::
	create a new branch named <branch>, referencing
	<start-point>, which may be specified any way you like,
	including using a branch name or a tag name
git branch -d <branch>::
	delete the branch <branch>; if the branch you are deleting
	points to a commit which is not reachable from the current
	branch, this command will fail with a warning.
git branch -D <branch>::
	even if the branch points to a commit not reachable
	from the current branch, you may know that that commit
	is still reachable from some other branch or tag.  In that
	case it is safe to use this command to force git to delete
	the branch.
git checkout <branch>::
	make the current branch <branch>, updating the working
	directory to reflect the version referenced by <branch>
git checkout -b <new> <start-point>::
	create a new branch <new> referencing <start-point>, and
	check it out.

The special symbol "HEAD" can always be used to refer to the current
branch.  In fact, git uses a file named "HEAD" in the .git directory to
remember which branch is current:

------------------------------------------------
$ cat .git/HEAD
ref: refs/heads/master
------------------------------------------------

[[detached-head]]
Examining an old version without creating a new branch
------------------------------------------------------

The `git checkout` command normally expects a branch head, but will also
accept an arbitrary commit; for example, you can check out the commit
referenced by a tag:

------------------------------------------------
$ git checkout v2.6.17
Note: moving to "v2.6.17" which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b <new_branch_name>
HEAD is now at 427abfa... Linux v2.6.17
------------------------------------------------

The HEAD then refers to the SHA1 of the commit instead of to a branch,
and git branch shows that you are no longer on a branch:

------------------------------------------------
$ cat .git/HEAD
427abfa28afedffadfca9dd8b067eb6d36bac53f
$ git branch
* (no branch)
  master
------------------------------------------------

In this case we say that the HEAD is "detached".

This is an easy way to check out a particular version without having to
make up a name for the new branch.   You can still create a new branch
(or tag) for this version later if you decide to.

[[examining-remote-branches]]
Examining branches from a remote repository
-------------------------------------------

The "master" branch that was created at the time you cloned is a copy
of the HEAD in the repository that you cloned from.  That repository
may also have had other branches, though, and your local repository
keeps branches which track each of those remote branches, which you
can view using the "-r" option to linkgit:git-branch[1]:

------------------------------------------------
$ git branch -r
  origin/HEAD
  origin/html
  origin/maint
  origin/man
  origin/master
  origin/next
  origin/pu
  origin/todo
------------------------------------------------

You cannot check out these remote-tracking branches, but you can
examine them on a branch of your own, just as you would a tag:

------------------------------------------------
$ git checkout -b my-todo-copy origin/todo
------------------------------------------------

Note that the name "origin" is just the name that git uses by default
to refer to the repository that you cloned from.

[[how-git-stores-references]]
Naming branches, tags, and other references
-------------------------------------------

Branches, remote-tracking branches, and tags are all references to
commits.  All references are named with a slash-separated path name
starting with "refs"; the names we've been using so far are actually
shorthand:

	- The branch "test" is short for "refs/heads/test".
	- The tag "v2.6.18" is short for "refs/tags/v2.6.18".
	- "origin/master" is short for "refs/remotes/origin/master".

The full name is occasionally useful if, for example, there ever
exists a tag and a branch with the same name.

(Newly created refs are actually stored in the .git/refs directory,
under the path given by their name.  However, for efficiency reasons
they may also be packed together in a single file; see
linkgit:git-pack-refs[1]).

As another useful shortcut, the "HEAD" of a repository can be referred
to just using the name of that repository.  So, for example, "origin"
is usually a shortcut for the HEAD branch in the repository "origin".

For the complete list of paths which git checks for references, and
the order it uses to decide which to choose when there are multiple
references with the same shorthand name, see the "SPECIFYING
REVISIONS" section of linkgit:git-rev-parse[1].

[[Updating-a-repository-With-git-fetch]]
Updating a repository with git fetch
------------------------------------

Eventually the developer cloned from will do additional work in her
repository, creating new commits and advancing the branches to point
at the new commits.

The command "git fetch", with no arguments, will update all of the
remote-tracking branches to the latest version found in her
repository.  It will not touch any of your own branches--not even the
"master" branch that was created for you on clone.

[[fetching-branches]]
Fetching branches from other repositories
-----------------------------------------

You can also track branches from repositories other than the one you
cloned from, using linkgit:git-remote[1]:

-------------------------------------------------
$ git remote add linux-nfs git://linux-nfs.org/pub/nfs-2.6.git
$ git fetch linux-nfs
* refs/remotes/linux-nfs/master: storing branch 'master' ...
  commit: bf81b46
-------------------------------------------------

New remote-tracking branches will be stored under the shorthand name
that you gave "git remote add", in this case linux-nfs:

-------------------------------------------------
$ git branch -r
linux-nfs/master
origin/master
-------------------------------------------------

If you run "git fetch <remote>" later, the tracking branches for the
named <remote> will be updated.

If you examine the file .git/config, you will see that git has added
a new stanza:

-------------------------------------------------
$ cat .git/config
...
[remote "linux-nfs"]
	url = git://linux-nfs.org/pub/nfs-2.6.git
	fetch = +refs/heads/*:refs/remotes/linux-nfs/*
...
-------------------------------------------------

This is what causes git to track the remote's branches; you may modify
or delete these configuration options by editing .git/config with a
text editor.  (See the "CONFIGURATION FILE" section of
linkgit:git-config[1] for details.)

[[exploring-git-history]]
Exploring git history
=====================

Git is best thought of as a tool for storing the history of a
collection of files.  It does this by storing compressed snapshots of
the contents of a file hierarchy, together with "commits" which show
the relationships between these snapshots.

Git provides extremely flexible and fast tools for exploring the
history of a project.

We start with one specialized tool that is useful for finding the
commit that introduced a bug into a project.

[[using-bisect]]
How to use bisect to find a regression
--------------------------------------

Suppose version 2.6.18 of your project worked, but the version at
"master" crashes.  Sometimes the best way to find the cause of such a
regression is to perform a brute-force search through the project's
history to find the particular commit that caused the problem.  The
linkgit:git-bisect[1] command can help you do this:

-------------------------------------------------
$ git bisect start
$ git bisect good v2.6.18
$ git bisect bad master
Bisecting: 3537 revisions left to test after this
[65934a9a028b88e83e2b0f8b36618fe503349f8e] BLOCK: Make USB storage depend on SCSI rather than selecting it [try #6]
-------------------------------------------------

If you run "git branch" at this point, you'll see that git has
temporarily moved you in "(no branch)". HEAD is now detached from any
branch and points directly to a commit (with commit id 65934...) that
is reachable from "master" but not from v2.6.18. Compile and test it,
and see whether it crashes. Assume it does crash. Then:

-------------------------------------------------
$ git bisect bad
Bisecting: 1769 revisions left to test after this
[7eff82c8b1511017ae605f0c99ac275a7e21b867] i2c-core: Drop useless bitmaskings
-------------------------------------------------

checks out an older version.  Continue like this, telling git at each
stage whether the version it gives you is good or bad, and notice
that the number of revisions left to test is cut approximately in
half each time.

After about 13 tests (in this case), it will output the commit id of
the guilty commit.  You can then examine the commit with
linkgit:git-show[1], find out who wrote it, and mail them your bug
report with the commit id.  Finally, run

-------------------------------------------------
$ git bisect reset
-------------------------------------------------

to return you to the branch you were on before.

Note that the version which `git bisect` checks out for you at each
point is just a suggestion, and you're free to try a different
version if you think it would be a good idea.  For example,
occasionally you may land on a commit that broke something unrelated;
run

-------------------------------------------------
$ git bisect visualize
-------------------------------------------------

which will run gitk and label the commit it chose with a marker that
says "bisect".  Choose a safe-looking commit nearby, note its commit
id, and check it out with:

-------------------------------------------------
$ git reset --hard fb47ddb2db...
-------------------------------------------------

then test, run "bisect good" or "bisect bad" as appropriate, and
continue.

Instead of "git bisect visualize" and then "git reset --hard
fb47ddb2db...", you might just want to tell git that you want to skip
the current commit:

-------------------------------------------------
$ git bisect skip
-------------------------------------------------

In this case, though, git may not eventually be able to tell the first
bad one between some first skipped commits and a later bad commit.

There are also ways to automate the bisecting process if you have a
test script that can tell a good from a bad commit. See
linkgit:git-bisect[1] for more information about this and other "git
bisect" features.

[[naming-commits]]
Naming commits
--------------

We have seen several ways of naming commits already:

	- 40-hexdigit object name
	- branch name: refers to the commit at the head of the given
	  branch
	- tag name: refers to the commit pointed to by the given tag
	  (we've seen branches and tags are special cases of
	  <<how-git-stores-references,references>>).
	- HEAD: refers to the head of the current branch

There are many more; see the "SPECIFYING REVISIONS" section of the
linkgit:git-rev-parse[1] man page for the complete list of ways to
name revisions.  Some examples:

-------------------------------------------------
$ git show fb47ddb2 # the first few characters of the object name
		    # are usually enough to specify it uniquely
$ git show HEAD^    # the parent of the HEAD commit
$ git show HEAD^^   # the grandparent
$ git show HEAD~4   # the great-great-grandparent
-------------------------------------------------

Recall that merge commits may have more than one parent; by default,
^ and ~ follow the first parent listed in the commit, but you can
also choose:

-------------------------------------------------
$ git show HEAD^1   # show the first parent of HEAD
$ git show HEAD^2   # show the second parent of HEAD
-------------------------------------------------

In addition to HEAD, there are several other special names for
commits:

Merges (to be discussed later), as well as operations such as
`git reset`, which change the currently checked-out commit, generally
set ORIG_HEAD to the value HEAD had before the current operation.

The `git fetch` operation always stores the head of the last fetched
branch in FETCH_HEAD.  For example, if you run `git fetch` without
specifying a local branch as the target of the operation

-------------------------------------------------
$ git fetch git://example.com/proj.git theirbranch
-------------------------------------------------

the fetched commits will still be available from FETCH_HEAD.

When we discuss merges we'll also see the special name MERGE_HEAD,
which refers to the other branch that we're merging in to the current
branch.

The linkgit:git-rev-parse[1] command is a low-level command that is
occasionally useful for translating some name for a commit to the object
name for that commit:

-------------------------------------------------
$ git rev-parse origin
e05db0fd4f31dde7005f075a84f96b360d05984b
-------------------------------------------------

[[creating-tags]]
Creating tags
-------------

We can also create a tag to refer to a particular commit; after
running

-------------------------------------------------
$ git tag stable-1 1b2e1d63ff
-------------------------------------------------

You can use stable-1 to refer to the commit 1b2e1d63ff.

This creates a "lightweight" tag.  If you would also like to include a
comment with the tag, and possibly sign it cryptographically, then you
should create a tag object instead; see the linkgit:git-tag[1] man page
for details.

[[browsing-revisions]]
Browsing revisions
------------------

The linkgit:git-log[1] command can show lists of commits.  On its
own, it shows all commits reachable from the parent commit; but you
can also make more specific requests:

-------------------------------------------------
$ git log v2.5..	# commits since (not reachable from) v2.5
$ git log test..master	# commits reachable from master but not test
$ git log master..test	# ...reachable from test but not master
$ git log master...test	# ...reachable from either test or master,
			#    but not both
$ git log --since="2 weeks ago" # commits from the last 2 weeks
$ git log Makefile      # commits which modify Makefile
$ git log fs/		# ... which modify any file under fs/
$ git log -S'foo()'	# commits which add or remove any file data
			# matching the string 'foo()'
-------------------------------------------------

And of course you can combine all of these; the following finds
commits since v2.5 which touch the Makefile or any file under fs:

-------------------------------------------------
$ git log v2.5.. Makefile fs/
-------------------------------------------------

You can also ask git log to show patches:

-------------------------------------------------
$ git log -p
-------------------------------------------------

See the "--pretty" option in the linkgit:git-log[1] man page for more
display options.

Note that git log starts with the most recent commit and works
backwards through the parents; however, since git history can contain
multiple independent lines of development, the particular order that
commits are listed in may be somewhat arbitrary.

[[generating-diffs]]
Generating diffs
----------------

You can generate diffs between any two versions using
linkgit:git-diff[1]:

-------------------------------------------------
$ git diff master..test
-------------------------------------------------

That will produce the diff between the tips of the two branches.  If
you'd prefer to find the diff from their common ancestor to test, you
can use three dots instead of two:

-------------------------------------------------
$ git diff master...test
-------------------------------------------------

Sometimes what you want instead is a set of patches; for this you can
use linkgit:git-format-patch[1]:

-------------------------------------------------
$ git format-patch master..test
-------------------------------------------------

will generate a file with a patch for each commit reachable from test
but not from master.

[[viewing-old-file-versions]]
Viewing old file versions
-------------------------

You can always view an old version of a file by just checking out the
correct revision first.  But sometimes it is more convenient to be
able to view an old version of a single file without checking
anything out; this command does that:

-------------------------------------------------
$ git show v2.5:fs/locks.c
-------------------------------------------------

Before the colon may be anything that names a commit, and after it
may be any path to a file tracked by git.

[[history-examples]]
Examples
--------

[[counting-commits-on-a-branch]]
Counting the number of commits on a branch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Suppose you want to know how many commits you've made on "mybranch"
since it diverged from "origin":

-------------------------------------------------
$ git log --pretty=oneline origin..mybranch | wc -l
-------------------------------------------------

Alternatively, you may often see this sort of thing done with the
lower-level command linkgit:git-rev-list[1], which just lists the SHA1's
of all the given commits:

-------------------------------------------------
$ git rev-list origin..mybranch | wc -l
-------------------------------------------------

[[checking-for-equal-branches]]
Check whether two branches point at the same history
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Suppose you want to check whether two branches point at the same point
in history.

-------------------------------------------------
$ git diff origin..master
-------------------------------------------------

will tell you whether the contents of the project are the same at the
two branches; in theory, however, it's possible that the same project
contents could have been arrived at by two different historical
routes.  You could compare the object names:

-------------------------------------------------
$ git rev-list origin
e05db0fd4f31dde7005f075a84f96b360d05984b
$ git rev-list master
e05db0fd4f31dde7005f075a84f96b360d05984b
-------------------------------------------------

Or you could recall that the ... operator selects all commits
contained reachable from either one reference or the other but not
both: so

-------------------------------------------------
$ git log origin...master
-------------------------------------------------

will return no commits when the two branches are equal.

[[finding-tagged-descendants]]
Find first tagged version including a given fix
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Suppose you know that the commit e05db0fd fixed a certain problem.
You'd like to find the earliest tagged release that contains that
fix.

Of course, there may be more than one answer--if the history branched
after commit e05db0fd, then there could be multiple "earliest" tagged
releases.

You could just visually inspect the commits since e05db0fd:

-------------------------------------------------
$ gitk e05db0fd..
-------------------------------------------------

Or you can use linkgit:git-name-rev[1], which will give the commit a
name based on any tag it finds pointing to one of the commit's
descendants:

-------------------------------------------------
$ git name-rev --tags e05db0fd
e05db0fd tags/v1.5.0-rc1^0~23
-------------------------------------------------

The linkgit:git-describe[1] command does the opposite, naming the
revision using a tag on which the given commit is based:

-------------------------------------------------
$ git describe e05db0fd
v1.5.0-rc0-260-ge05db0f
-------------------------------------------------

but that may sometimes help you guess which tags might come after the
given commit.

If you just want to verify whether a given tagged version contains a
given commit, you could use linkgit:git-merge-base[1]:

-------------------------------------------------
$ git merge-base e05db0fd v1.5.0-rc1
e05db0fd4f31dde7005f075a84f96b360d05984b
-------------------------------------------------

The merge-base command finds a common ancestor of the given commits,
and always returns one or the other in the case where one is a
descendant of the other; so the above output shows that e05db0fd
actually is an ancestor of v1.5.0-rc1.

Alternatively, note that

-------------------------------------------------
$ git log v1.5.0-rc1..e05db0fd
-------------------------------------------------

will produce empty output if and only if v1.5.0-rc1 includes e05db0fd,
because it outputs only commits that are not reachable from v1.5.0-rc1.

As yet another alternative, the linkgit:git-show-branch[1] command lists
the commits reachable from its arguments with a display on the left-hand
side that indicates which arguments that commit is reachable from.  So,
you can run something like

-------------------------------------------------
$ git show-branch e05db0fd v1.5.0-rc0 v1.5.0-rc1 v1.5.0-rc2
! [e05db0fd] Fix warnings in sha1_file.c - use C99 printf format if
available
 ! [v1.5.0-rc0] GIT v1.5.0 preview
  ! [v1.5.0-rc1] GIT v1.5.0-rc1
   ! [v1.5.0-rc2] GIT v1.5.0-rc2
...
-------------------------------------------------

then search for a line that looks like

-------------------------------------------------
+ ++ [e05db0fd] Fix warnings in sha1_file.c - use C99 printf format if
available
-------------------------------------------------

Which shows that e05db0fd is reachable from itself, from v1.5.0-rc1, and
from v1.5.0-rc2, but not from v1.5.0-rc0.

[[showing-commits-unique-to-a-branch]]
Showing commits unique to a given branch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Suppose you would like to see all the commits reachable from the branch
head named "master" but not from any other head in your repository.

We can list all the heads in this repository with
linkgit:git-show-ref[1]:

-------------------------------------------------
$ git show-ref --heads
bf62196b5e363d73353a9dcf094c59595f3153b7 refs/heads/core-tutorial
db768d5504c1bb46f63ee9d6e1772bd047e05bf9 refs/heads/maint
a07157ac624b2524a059a3414e99f6f44bebc1e7 refs/heads/master
24dbc180ea14dc1aebe09f14c8ecf32010690627 refs/heads/tutorial-2
1e87486ae06626c2f31eaa63d26fc0fd646c8af2 refs/heads/tutorial-fixes
-------------------------------------------------

We can get just the branch-head names, and remove "master", with
the help of the standard utilities cut and grep:

-------------------------------------------------
$ git show-ref --heads | cut -d' ' -f2 | grep -v '^refs/heads/master'
refs/heads/core-tutorial
refs/heads/maint
refs/heads/tutorial-2
refs/heads/tutorial-fixes
-------------------------------------------------

And then we can ask to see all the commits reachable from master
but not from these other heads:

-------------------------------------------------
$ gitk master --not $( git show-ref --heads | cut -d' ' -f2 |
				grep -v '^refs/heads/master' )
-------------------------------------------------

Obviously, endless variations are possible; for example, to see all
commits reachable from some head but not from any tag in the repository:

-------------------------------------------------
$ gitk $( git show-ref --heads ) --not  $( git show-ref --tags )
-------------------------------------------------

(See linkgit:git-rev-parse[1] for explanations of commit-selecting
syntax such as `--not`.)

[[making-a-release]]
Creating a changelog and tarball for a software release
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The linkgit:git-archive[1] command can create a tar or zip archive from
any version of a project; for example:

-------------------------------------------------
$ git archive --format=tar --prefix=project/ HEAD | gzip >latest.tar.gz
-------------------------------------------------

will use HEAD to produce a tar archive in which each filename is
preceded by "project/".

If you're releasing a new version of a software project, you may want
to simultaneously make a changelog to include in the release
announcement.

Linus Torvalds, for example, makes new kernel releases by tagging them,
then running:

-------------------------------------------------
$ release-script 2.6.12 2.6.13-rc6 2.6.13-rc7
-------------------------------------------------

where release-script is a shell script that looks like:

-------------------------------------------------
#!/bin/sh
stable="$1"
last="$2"
new="$3"
echo "# git tag v$new"
echo "git archive --prefix=linux-$new/ v$new | gzip -9 > ../linux-$new.tar.gz"
echo "git diff v$stable v$new | gzip -9 > ../patch-$new.gz"
echo "git log --no-merges v$new ^v$last > ../ChangeLog-$new"
echo "git shortlog --no-merges v$new ^v$last > ../ShortLog"
echo "git diff --stat --summary -M v$last v$new > ../diffstat-$new"
-------------------------------------------------

and then he just cut-and-pastes the output commands after verifying that
they look OK.

[[Finding-comments-With-given-Content]]
Finding commits referencing a file with given content
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Somebody hands you a copy of a file, and asks which commits modified a
file such that it contained the given content either before or after the
commit.  You can find out with this:

-------------------------------------------------
$  git log --raw --abbrev=40 --pretty=oneline |
	grep -B 1 `git hash-object filename`
-------------------------------------------------

Figuring out why this works is left as an exercise to the (advanced)
student.  The linkgit:git-log[1], linkgit:git-diff-tree[1], and
linkgit:git-hash-object[1] man pages may prove helpful.

[[Developing-With-git]]
Developing with git
===================

[[telling-git-your-name]]
Telling git your name
---------------------

Before creating any commits, you should introduce yourself to git.  The
easiest way to do so is to make sure the following lines appear in a
file named .gitconfig in your home directory:

------------------------------------------------
[user]
	name = Your Name Comes Here
	email = you@yourdomain.example.com
------------------------------------------------

(See the "CONFIGURATION FILE" section of linkgit:git-config[1] for
details on the configuration file.)


[[creating-a-new-repository]]
Creating a new repository
-------------------------

Creating a new repository from scratch is very easy:

-------------------------------------------------
$ mkdir project
$ cd project
$ git init
-------------------------------------------------

If you have some initial content (say, a tarball):

-------------------------------------------------
$ tar xzvf project.tar.gz
$ cd project
$ git init
$ git add . # include everything below ./ in the first commit:
$ git commit
-------------------------------------------------

[[how-to-make-a-commit]]
How to make a commit
--------------------

Creating a new commit takes three steps:

	1. Making some changes to the working directory using your
	   favorite editor.
	2. Telling git about your changes.
	3. Creating the commit using the content you told git about
	   in step 2.

In practice, you can interleave and repeat steps 1 and 2 as many
times as you want: in order to keep track of what you want committed
at step 3, git maintains a snapshot of the tree's contents in a
special staging area called "the index."

At the beginning, the content of the index will be identical to
that of the HEAD.  The command "git diff --cached", which shows
the difference between the HEAD and the index, should therefore
produce no output at that point.

Modifying the index is easy:

To update the index with the new contents of a modified file, use

-------------------------------------------------
$ git add path/to/file
-------------------------------------------------

To add the contents of a new file to the index, use

-------------------------------------------------
$ git add path/to/file
-------------------------------------------------

To remove a file from the index and from the working tree,

-------------------------------------------------
$ git rm path/to/file
-------------------------------------------------

After each step you can verify that

-------------------------------------------------
$ git diff --cached
-------------------------------------------------

always shows the difference between the HEAD and the index file--this
is what you'd commit if you created the commit now--and that

-------------------------------------------------
$ git diff
-------------------------------------------------

shows the difference between the working tree and the index file.

Note that "git add" always adds just the current contents of a file
to the index; further changes to the same file will be ignored unless
you run `git add` on the file again.

When you're ready, just run

-------------------------------------------------
$ git commit
-------------------------------------------------

and git will prompt you for a commit message and then create the new
commit.  Check to make sure it looks like what you expected with

-------------------------------------------------
$ git show
-------------------------------------------------

As a special shortcut,

-------------------------------------------------
$ git commit -a
-------------------------------------------------

will update the index with any files that you've modified or removed
and create a commit, all in one step.

A number of commands are useful for keeping track of what you're
about to commit:

-------------------------------------------------
$ git diff --cached # difference between HEAD and the index; what
		    # would be committed if you ran "commit" now.
$ git diff	    # difference between the index file and your
		    # working directory; changes that would not
		    # be included if you ran "commit" now.
$ git diff HEAD	    # difference between HEAD and working tree; what
		    # would be committed if you ran "commit -a" now.
$ git status	    # a brief per-file summary of the above.
-------------------------------------------------

You can also use linkgit:git-gui[1] to create commits, view changes in
the index and the working tree files, and individually select diff hunks
for inclusion in the index (by right-clicking on the diff hunk and
choosing "Stage Hunk For Commit").

[[creating-good-commit-messages]]
Creating good commit messages
-----------------------------

Though not required, it's a good idea to begin the commit message
with a single short (less than 50 character) line summarizing the
change, followed by a blank line and then a more thorough
description.  Tools that turn commits into email, for example, use
the first line on the Subject line and the rest of the commit in the
body.

[[ignoring-files]]
Ignoring files
--------------

A project will often generate files that you do 'not' want to track with git.
This typically includes files generated by a build process or temporary
backup files made by your editor. Of course, 'not' tracking files with git
is just a matter of 'not' calling `git add` on them. But it quickly becomes
annoying to have these untracked files lying around; e.g. they make
`git add .` practically useless, and they keep showing up in the output of
`git status`.

You can tell git to ignore certain files by creating a file called .gitignore
in the top level of your working directory, with contents such as:

-------------------------------------------------
# Lines starting with '#' are considered comments.
# Ignore any file named foo.txt.
foo.txt
# Ignore (generated) html files,
*.html
# except foo.html which is maintained by hand.
!foo.html
# Ignore objects and archives.
*.[oa]
-------------------------------------------------

See linkgit:gitignore[5] for a detailed explanation of the syntax.  You can
also place .gitignore files in other directories in your working tree, and they
will apply to those directories and their subdirectories.  The `.gitignore`
files can be added to your repository like any other files (just run `git add
.gitignore` and `git commit`, as usual), which is convenient when the exclude
patterns (such as patterns matching build output files) would also make sense
for other users who clone your repository.

If you wish the exclude patterns to affect only certain repositories
(instead of every repository for a given project), you may instead put
them in a file in your repository named .git/info/exclude, or in any file
specified by the `core.excludesfile` configuration variable.  Some git
commands can also take exclude patterns directly on the command line.
See linkgit:gitignore[5] for the details.

[[how-to-merge]]
How to merge
------------

You can rejoin two diverging branches of development using
linkgit:git-merge[1]:

-------------------------------------------------
$ git merge branchname
-------------------------------------------------

merges the development in the branch "branchname" into the current
branch.  If there are conflicts--for example, if the same file is
modified in two different ways in the remote branch and the local
branch--then you are warned; the output may look something like this:

-------------------------------------------------
$ git merge next
 100% (4/4) done
Auto-merged file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.
-------------------------------------------------

Conflict markers are left in the problematic files, and after
you resolve the conflicts manually, you can update the index
with the contents and run git commit, as you normally would when
creating a new file.

If you examine the resulting commit using gitk, you will see that it
has two parents, one pointing to the top of the current branch, and
one to the top of the other branch.

[[resolving-a-merge]]
Resolving a merge
-----------------

When a merge isn't resolved automatically, git leaves the index and
the working tree in a special state that gives you all the
information you need to help resolve the merge.

Files with conflicts are marked specially in the index, so until you
resolve the problem and update the index, linkgit:git-commit[1] will
fail:

-------------------------------------------------
$ git commit
file.txt: needs merge
-------------------------------------------------

Also, linkgit:git-status[1] will list those files as "unmerged", and the
files with conflicts will have conflict markers added, like this:

-------------------------------------------------
<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
-------------------------------------------------

All you need to do is edit the files to resolve the conflicts, and then

-------------------------------------------------
$ git add file.txt
$ git commit
-------------------------------------------------

Note that the commit message will already be filled in for you with
some information about the merge.  Normally you can just use this
default message unchanged, but you may add additional commentary of
your own if desired.

The above is all you need to know to resolve a simple merge.  But git
also provides more information to help resolve conflicts:

[[conflict-resolution]]
Getting conflict-resolution help during a merge
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

All of the changes that git was able to merge automatically are
already added to the index file, so linkgit:git-diff[1] shows only
the conflicts.  It uses an unusual syntax:

-------------------------------------------------
$ git diff
diff --cc file.txt
index 802992c,2b60207..0000000
--- a/file.txt
+++ b/file.txt
@@@ -1,1 -1,1 +1,5 @@@
++<<<<<<< HEAD:file.txt
 +Hello world
++=======
+ Goodbye
++>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
-------------------------------------------------

Recall that the commit which will be committed after we resolve this
conflict will have two parents instead of the usual one: one parent
will be HEAD, the tip of the current branch; the other will be the
tip of the other branch, which is stored temporarily in MERGE_HEAD.

During the merge, the index holds three versions of each file.  Each of
these three "file stages" represents a different version of the file:

-------------------------------------------------
$ git show :1:file.txt	# the file in a common ancestor of both branches
$ git show :2:file.txt	# the version from HEAD.
$ git show :3:file.txt	# the version from MERGE_HEAD.
-------------------------------------------------

When you ask linkgit:git-diff[1] to show the conflicts, it runs a
three-way diff between the conflicted merge results in the work tree with
stages 2 and 3 to show only hunks whose contents come from both sides,
mixed (in other words, when a hunk's merge results come only from stage 2,
that part is not conflicting and is not shown.  Same for stage 3).

The diff above shows the differences between the working-tree version of
file.txt and the stage 2 and stage 3 versions.  So instead of preceding
each line by a single "+" or "-", it now uses two columns: the first
column is used for differences between the first parent and the working
directory copy, and the second for differences between the second parent
and the working directory copy.  (See the "COMBINED DIFF FORMAT" section
of linkgit:git-diff-files[1] for a details of the format.)

After resolving the conflict in the obvious way (but before updating the
index), the diff will look like:

-------------------------------------------------
$ git diff
diff --cc file.txt
index 802992c,2b60207..0000000
--- a/file.txt
+++ b/file.txt
@@@ -1,1 -1,1 +1,1 @@@
- Hello world
 -Goodbye
++Goodbye world
-------------------------------------------------

This shows that our resolved version deleted "Hello world" from the
first parent, deleted "Goodbye" from the second parent, and added
"Goodbye world", which was previously absent from both.

Some special diff options allow diffing the working directory against
any of these stages:

-------------------------------------------------
$ git diff -1 file.txt		# diff against stage 1
$ git diff --base file.txt	# same as the above
$ git diff -2 file.txt		# diff against stage 2
$ git diff --ours file.txt	# same as the above
$ git diff -3 file.txt		# diff against stage 3
$ git diff --theirs file.txt	# same as the above.
-------------------------------------------------

The linkgit:git-log[1] and linkgit:gitk[1] commands also provide special help
for merges:

-------------------------------------------------
$ git log --merge
$ gitk --merge
-------------------------------------------------

These will display all commits which exist only on HEAD or on
MERGE_HEAD, and which touch an unmerged file.

You may also use linkgit:git-mergetool[1], which lets you merge the
unmerged files using external tools such as Emacs or kdiff3.

Each time you resolve the conflicts in a file and update the index:

-------------------------------------------------
$ git add file.txt
-------------------------------------------------

the different stages of that file will be "collapsed", after which
`git diff` will (by default) no longer show diffs for that file.

[[undoing-a-merge]]
Undoing a merge
---------------

If you get stuck and decide to just give up and throw the whole mess
away, you can always return to the pre-merge state with

-------------------------------------------------
$ git reset --hard HEAD
-------------------------------------------------

Or, if you've already committed the merge that you want to throw away,

-------------------------------------------------
$ git reset --hard ORIG_HEAD
-------------------------------------------------

However, this last command can be dangerous in some cases--never
throw away a commit you have already committed if that commit may
itself have been merged into another branch, as doing so may confuse
further merges.

[[fast-forwards]]
Fast-forward merges
-------------------

There is one special case not mentioned above, which is treated
differently.  Normally, a merge results in a merge commit, with two
parents, one pointing at each of the two lines of development that
were merged.

However, if the current branch is a descendant of the other--so every
commit present in the one is already contained in the other--then git
just performs a "fast forward"; the head of the current branch is moved
forward to point at the head of the merged-in branch, without any new
commits being created.

[[fixing-mistakes]]
Fixing mistakes
---------------

If you've messed up the working tree, but haven't yet committed your
mistake, you can return the entire working tree to the last committed
state with

-------------------------------------------------
$ git reset --hard HEAD
-------------------------------------------------

If you make a commit that you later wish you hadn't, there are two
fundamentally different ways to fix the problem:

	1. You can create a new commit that undoes whatever was done
	by the old commit.  This is the correct thing if your
	mistake has already been made public.

	2. You can go back and modify the old commit.  You should
	never do this if you have already made the history public;
	git does not normally expect the "history" of a project to
	change, and cannot correctly perform repeated merges from
	a branch that has had its history changed.

[[reverting-a-commit]]
Fixing a mistake with a new commit
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Creating a new commit that reverts an earlier change is very easy;
just pass the linkgit:git-revert[1] command a reference to the bad
commit; for example, to revert the most recent commit:

-------------------------------------------------
$ git revert HEAD
-------------------------------------------------

This will create a new commit which undoes the change in HEAD.  You
will be given a chance to edit the commit message for the new commit.

You can also revert an earlier change, for example, the next-to-last:

-------------------------------------------------
$ git revert HEAD^
-------------------------------------------------

In this case git will attempt to undo the old change while leaving
intact any changes made since then.  If more recent changes overlap
with the changes to be reverted, then you will be asked to fix
conflicts manually, just as in the case of <<resolving-a-merge,
resolving a merge>>.

[[fixing-a-mistake-by-rewriting-history]]
Fixing a mistake by rewriting history
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If the problematic commit is the most recent commit, and you have not
yet made that commit public, then you may just
<<undoing-a-merge,destroy it using `git reset`>>.

Alternatively, you
can edit the working directory and update the index to fix your
mistake, just as if you were going to <<how-to-make-a-commit,create a
new commit>>, then run

-------------------------------------------------
$ git commit --amend
-------------------------------------------------

which will replace the old commit by a new commit incorporating your
changes, giving you a chance to edit the old commit message first.

Again, you should never do this to a commit that may already have
been merged into another branch; use linkgit:git-revert[1] instead in
that case.

It is also possible to replace commits further back in the history, but
this is an advanced topic to be left for
<<cleaning-up-history,another chapter>>.

[[checkout-of-path]]
Checking out an old version of a file
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In the process of undoing a previous bad change, you may find it
useful to check out an older version of a particular file using
linkgit:git-checkout[1].  We've used `git checkout` before to switch
branches, but it has quite different behavior if it is given a path
name: the command

-------------------------------------------------
$ git checkout HEAD^ path/to/file
-------------------------------------------------

replaces path/to/file by the contents it had in the commit HEAD^, and
also updates the index to match.  It does not change branches.

If you just want to look at an old version of the file, without
modifying the working directory, you can do that with
linkgit:git-show[1]:

-------------------------------------------------
$ git show HEAD^:path/to/file
-------------------------------------------------

which will display the given version of the file.

[[interrupted-work]]
Temporarily setting aside work in progress
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

While you are in the middle of working on something complicated, you
find an unrelated but obvious and trivial bug.  You would like to fix it
before continuing.  You can use linkgit:git-stash[1] to save the current
state of your work, and after fixing the bug (or, optionally after doing
so on a different branch and then coming back), unstash the
work-in-progress changes.

------------------------------------------------
$ git stash save "work in progress for foo feature"
------------------------------------------------

This command will save your changes away to the `stash`, and
reset your working tree and the index to match the tip of your
current branch.  Then you can make your fix as usual.

------------------------------------------------
... edit and test ...
$ git commit -a -m "blorpl: typofix"
------------------------------------------------

After that, you can go back to what you were working on with
`git stash apply`:

------------------------------------------------
$ git stash apply
------------------------------------------------


[[ensuring-good-performance]]
Ensuring good performance
-------------------------

On large repositories, git depends on compression to keep the history
information from taking up too much space on disk or in memory.

This compression is not performed automatically.  Therefore you
should occasionally run linkgit:git-gc[1]:

-------------------------------------------------
$ git gc
-------------------------------------------------

to recompress the archive.  This can be very time-consuming, so
you may prefer to run `git gc` when you are not doing other work.


[[ensuring-reliability]]
Ensuring reliability
--------------------

[[checking-for-corruption]]
Checking the repository for corruption
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The linkgit:git-fsck[1] command runs a number of self-consistency checks
on the repository, and reports on any problems.  This may take some
time.  The most common warning by far is about "dangling" objects:

-------------------------------------------------
$ git fsck
dangling commit 7281251ddd2a61e38657c827739c57015671a6b3
dangling commit 2706a059f258c6b245f298dc4ff2ccd30ec21a63
dangling commit 13472b7c4b80851a1bc551779171dcb03655e9b5
dangling blob 218761f9d90712d37a9c5e36f406f92202db07eb
dangling commit bf093535a34a4d35731aa2bd90fe6b176302f14f
dangling commit 8e4bec7f2ddaa268bef999853c25755452100f8e
dangling tree d50bb86186bf27b681d25af89d3b5b68382e4085
dangling tree b24c2473f1fd3d91352a624795be026d64c8841f
...
-------------------------------------------------

Dangling objects are not a problem.  At worst they may take up a little
extra disk space.  They can sometimes provide a last-resort method for
recovering lost work--see <<dangling-objects>> for details.

[[recovering-lost-changes]]
Recovering lost changes
~~~~~~~~~~~~~~~~~~~~~~~

[[reflogs]]
Reflogs
^^^^^^^

Say you modify a branch with `linkgit:git-reset[1] --hard`, and then
realize that the branch was the only reference you had to that point in
history.

Fortunately, git also keeps a log, called a "reflog", of all the
previous values of each branch.  So in this case you can still find the
old history using, for example,

-------------------------------------------------
$ git log master@{1}
-------------------------------------------------

This lists the commits reachable from the previous version of the
"master" branch head.  This syntax can be used with any git command
that accepts a commit, not just with git log.  Some other examples:

-------------------------------------------------
$ git show master@{2}		# See where the branch pointed 2,
$ git show master@{3}		# 3, ... changes ago.
$ gitk master@{yesterday}	# See where it pointed yesterday,
$ gitk master@{"1 week ago"}	# ... or last week
$ git log --walk-reflogs master	# show reflog entries for master
-------------------------------------------------

A separate reflog is kept for the HEAD, so

-------------------------------------------------
$ git show HEAD@{"1 week ago"}
-------------------------------------------------

will show what HEAD pointed to one week ago, not what the current branch
pointed to one week ago.  This allows you to see the history of what
you've checked out.

The reflogs are kept by default for 30 days, after which they may be
pruned.  See linkgit:git-reflog[1] and linkgit:git-gc[1] to learn
how to control this pruning, and see the "SPECIFYING REVISIONS"
section of linkgit:git-rev-parse[1] for details.

Note that the reflog history is very different from normal git history.
While normal history is shared by every repository that works on the
same project, the reflog history is not shared: it tells you only about
how the branches in your local repository have changed over time.

[[dangling-object-recovery]]
Examining dangling objects
^^^^^^^^^^^^^^^^^^^^^^^^^^

In some situations the reflog may not be able to save you.  For example,
suppose you delete a branch, then realize you need the history it
contained.  The reflog is also deleted; however, if you have not yet
pruned the repository, then you may still be able to find the lost
commits in the dangling objects that `git fsck` reports.  See
<<dangling-objects>> for the details.

-------------------------------------------------
$ git fsck
dangling commit 7281251ddd2a61e38657c827739c57015671a6b3
dangling commit 2706a059f258c6b245f298dc4ff2ccd30ec21a63
dangling commit 13472b7c4b80851a1bc551779171dcb03655e9b5
...
-------------------------------------------------

You can examine
one of those dangling commits with, for example,

------------------------------------------------
$ gitk 7281251ddd --not --all
------------------------------------------------

which does what it sounds like: it says that you want to see the commit
history that is described by the dangling commit(s), but not the
history that is described by all your existing branches and tags.  Thus
you get exactly the history reachable from that commit that is lost.
(And notice that it might not be just one commit: we only report the
"tip of the line" as being dangling, but there might be a whole deep
and complex commit history that was dropped.)

If you decide you want the history back, you can always create a new
reference pointing to it, for example, a new branch:

------------------------------------------------
$ git branch recovered-branch 7281251ddd
------------------------------------------------

Other types of dangling objects (blobs and trees) are also possible, and
dangling objects can arise in other situations.


[[sharing-development]]
Sharing development with others
===============================

[[getting-updates-With-git-pull]]
Getting updates with git pull
-----------------------------

After you clone a repository and make a few changes of your own, you
may wish to check the original repository for updates and merge them
into your own work.

We have already seen <<Updating-a-repository-With-git-fetch,how to
keep remote tracking branches up to date>> with linkgit:git-fetch[1],
and how to merge two branches.  So you can merge in changes from the
original repository's master branch with:

-------------------------------------------------
$ git fetch
$ git merge origin/master
-------------------------------------------------

However, the linkgit:git-pull[1] command provides a way to do this in
one step:

-------------------------------------------------
$ git pull origin master
-------------------------------------------------

In fact, if you have "master" checked out, then by default "git pull"
merges from the HEAD branch of the origin repository.  So often you can
accomplish the above with just a simple

-------------------------------------------------
$ git pull
-------------------------------------------------

More generally, a branch that is created from a remote branch will pull
by default from that branch.  See the descriptions of the
branch.<name>.remote and branch.<name>.merge options in
linkgit:git-config[1], and the discussion of the `--track` option in
linkgit:git-checkout[1], to learn how to control these defaults.

In addition to saving you keystrokes, "git pull" also helps you by
producing a default commit message documenting the branch and
repository that you pulled from.

(But note that no such commit will be created in the case of a
<<fast-forwards,fast forward>>; instead, your branch will just be
updated to point to the latest commit from the upstream branch.)

The `git pull` command can also be given "." as the "remote" repository,
in which case it just merges in a branch from the current repository; so
the commands

-------------------------------------------------
$ git pull . branch
$ git merge branch
-------------------------------------------------

are roughly equivalent.  The former is actually very commonly used.

[[submitting-patches]]
Submitting patches to a project
-------------------------------

If you just have a few changes, the simplest way to submit them may
just be to send them as patches in email:

First, use linkgit:git-format-patch[1]; for example:

-------------------------------------------------
$ git format-patch origin
-------------------------------------------------

will produce a numbered series of files in the current directory, one
for each patch in the current branch but not in origin/HEAD.

You can then import these into your mail client and send them by
hand.  However, if you have a lot to send at once, you may prefer to
use the linkgit:git-send-email[1] script to automate the process.
Consult the mailing list for your project first to determine how they
prefer such patches be handled.

[[importing-patches]]
Importing patches to a project
------------------------------

Git also provides a tool called linkgit:git-am[1] (am stands for
"apply mailbox"), for importing such an emailed series of patches.
Just save all of the patch-containing messages, in order, into a
single mailbox file, say "patches.mbox", then run

-------------------------------------------------
$ git am -3 patches.mbox
-------------------------------------------------

Git will apply each patch in order; if any conflicts are found, it
will stop, and you can fix the conflicts as described in
"<<resolving-a-merge,Resolving a merge>>".  (The "-3" option tells
git to perform a merge; if you would prefer it just to abort and
leave your tree and index untouched, you may omit that option.)

Once the index is updated with the results of the conflict
resolution, instead of creating a new commit, just run

-------------------------------------------------
$ git am --resolved
-------------------------------------------------

and git will create the commit for you and continue applying the
remaining patches from the mailbox.

The final result will be a series of commits, one for each patch in
the original mailbox, with authorship and commit log message each
taken from the message containing each patch.

[[public-repositories]]
Public git repositories
-----------------------

Another way to submit changes to a project is to tell the maintainer
of that project to pull the changes from your repository using
linkgit:git-pull[1].  In the section "<<getting-updates-With-git-pull,
Getting updates with `git pull`>>" we described this as a way to get
updates from the "main" repository, but it works just as well in the
other direction.

If you and the maintainer both have accounts on the same machine, then
you can just pull changes from each other's repositories directly;
commands that accept repository URLs as arguments will also accept a
local directory name:

-------------------------------------------------
$ git clone /path/to/repository
$ git pull /path/to/other/repository
-------------------------------------------------

or an ssh URL:

-------------------------------------------------
$ git clone ssh://yourhost/~you/repository
-------------------------------------------------

For projects with few developers, or for synchronizing a few private
repositories, this may be all you need.

However, the more common way to do this is to maintain a separate public
repository (usually on a different host) for others to pull changes
from.  This is usually more convenient, and allows you to cleanly
separate private work in progress from publicly visible work.

You will continue to do your day-to-day work in your personal
repository, but periodically "push" changes from your personal
repository into your public repository, allowing other developers to
pull from that repository.  So the flow of changes, in a situation
where there is one other developer with a public repository, looks
like this:

                        you push
  your personal repo ------------------> your public repo
	^                                     |
	|                                     |
	| you pull                            | they pull
	|                                     |
	|                                     |
        |               they push             V
  their public repo <------------------- their repo

We explain how to do this in the following sections.

[[setting-up-a-public-repository]]
Setting up a public repository
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Assume your personal repository is in the directory ~/proj.  We
first create a new clone of the repository and tell `git daemon` that it
is meant to be public:

-------------------------------------------------
$ git clone --bare ~/proj proj.git
$ touch proj.git/git-daemon-export-ok
-------------------------------------------------

The resulting directory proj.git contains a "bare" git repository--it is
just the contents of the ".git" directory, without any files checked out
around it.

Next, copy proj.git to the server where you plan to host the
public repository.  You can use scp, rsync, or whatever is most
convenient.

[[exporting-via-git]]
Exporting a git repository via the git protocol
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This is the preferred method.

If someone else administers the server, they should tell you what
directory to put the repository in, and what git:// URL it will appear
at.  You can then skip to the section
"<<pushing-changes-to-a-public-repository,Pushing changes to a public
repository>>", below.

Otherwise, all you need to do is start linkgit:git-daemon[1]; it will
listen on port 9418.  By default, it will allow access to any directory
that looks like a git directory and contains the magic file
git-daemon-export-ok.  Passing some directory paths as `git daemon`
arguments will further restrict the exports to those paths.

You can also run `git daemon` as an inetd service; see the
linkgit:git-daemon[1] man page for details.  (See especially the
examples section.)

[[exporting-via-http]]
Exporting a git repository via http
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The git protocol gives better performance and reliability, but on a
host with a web server set up, http exports may be simpler to set up.

All you need to do is place the newly created bare git repository in
a directory that is exported by the web server, and make some
adjustments to give web clients some extra information they need:

-------------------------------------------------
$ mv proj.git /home/you/public_html/proj.git
$ cd proj.git
$ git --bare update-server-info
$ mv hooks/post-update.sample hooks/post-update
-------------------------------------------------

(For an explanation of the last two lines, see
linkgit:git-update-server-info[1] and linkgit:githooks[5].)

Advertise the URL of proj.git.  Anybody else should then be able to
clone or pull from that URL, for example with a command line like:

-------------------------------------------------
$ git clone http://yourserver.com/~you/proj.git
-------------------------------------------------

(See also
link:howto/setup-git-server-over-http.txt[setup-git-server-over-http]
for a slightly more sophisticated setup using WebDAV which also
allows pushing over http.)

[[pushing-changes-to-a-public-repository]]
Pushing changes to a public repository
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Note that the two techniques outlined above (exporting via
<<exporting-via-http,http>> or <<exporting-via-git,git>>) allow other
maintainers to fetch your latest changes, but they do not allow write
access, which you will need to update the public repository with the
latest changes created in your private repository.

The simplest way to do this is using linkgit:git-push[1] and ssh; to
update the remote branch named "master" with the latest state of your
branch named "master", run

-------------------------------------------------
$ git push ssh://yourserver.com/~you/proj.git master:master
-------------------------------------------------

or just

-------------------------------------------------
$ git push ssh://yourserver.com/~you/proj.git master
-------------------------------------------------

As with `git fetch`, `git push` will complain if this does not result in a
<<fast-forwards,fast forward>>; see the following section for details on
handling this case.

Note that the target of a "push" is normally a
<<def_bare_repository,bare>> repository.  You can also push to a
repository that has a checked-out working tree, but the working tree
will not be updated by the push.  This may lead to unexpected results if
the branch you push to is the currently checked-out branch!

As with `git fetch`, you may also set up configuration options to
save typing; so, for example, after

-------------------------------------------------
$ cat >>.git/config <<EOF
[remote "public-repo"]
	url = ssh://yourserver.com/~you/proj.git
EOF
-------------------------------------------------

you should be able to perform the above push with just

-------------------------------------------------
$ git push public-repo master
-------------------------------------------------

See the explanations of the remote.<name>.url, branch.<name>.remote,
and remote.<name>.push options in linkgit:git-config[1] for
details.

[[forcing-push]]
What to do when a push fails
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If a push would not result in a <<fast-forwards,fast forward>> of the
remote branch, then it will fail with an error like:

-------------------------------------------------
error: remote 'refs/heads/master' is not an ancestor of
 local  'refs/heads/master'.
 Maybe you are not up-to-date and need to pull first?
error: failed to push to 'ssh://yourserver.com/~you/proj.git'
-------------------------------------------------

This can happen, for example, if you:

	- use `git reset --hard` to remove already-published commits, or
	- use `git commit --amend` to replace already-published commits
	  (as in <<fixing-a-mistake-by-rewriting-history>>), or
	- use `git rebase` to rebase any already-published commits (as
	  in <<using-git-rebase>>).

You may force `git push` to perform the update anyway by preceding the
branch name with a plus sign:

-------------------------------------------------
$ git push ssh://yourserver.com/~you/proj.git +master
-------------------------------------------------

Normally whenever a branch head in a public repository is modified, it
is modified to point to a descendant of the commit that it pointed to
before.  By forcing a push in this situation, you break that convention.
(See <<problems-With-rewriting-history>>.)

Nevertheless, this is a common practice for people that need a simple
way to publish a work-in-progress patch series, and it is an acceptable
compromise as long as you warn other developers that this is how you
intend to manage the branch.

It's also possible for a push to fail in this way when other people have
the right to push to the same repository.  In that case, the correct
solution is to retry the push after first updating your work: either by a
pull, or by a fetch followed by a rebase; see the
<<setting-up-a-shared-repository,next section>> and
linkgit:gitcvs-migration[7] for more.

[[setting-up-a-shared-repository]]
Setting up a shared repository
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Another way to collaborate is by using a model similar to that
commonly used in CVS, where several developers with special rights
all push to and pull from a single shared repository.  See
linkgit:gitcvs-migration[7] for instructions on how to
set this up.

However, while there is nothing wrong with git's support for shared
repositories, this mode of operation is not generally recommended,
simply because the mode of collaboration that git supports--by
exchanging patches and pulling from public repositories--has so many
advantages over the central shared repository:

	- Git's ability to quickly import and merge patches allows a
	  single maintainer to process incoming changes even at very
	  high rates.  And when that becomes too much, `git pull` provides
	  an easy way for that maintainer to delegate this job to other
	  maintainers while still allowing optional review of incoming
	  changes.
	- Since every developer's repository has the same complete copy
	  of the project history, no repository is special, and it is
	  trivial for another developer to take over maintenance of a
	  project, either by mutual agreement, or because a maintainer
	  becomes unresponsive or difficult to work with.
	- The lack of a central group of "committers" means there is
	  less need for formal decisions about who is "in" and who is
	  "out".

[[setting-up-gitweb]]
Allowing web browsing of a repository
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The gitweb cgi script provides users an easy way to browse your
project's files and history without having to install git; see the file
gitweb/INSTALL in the git source tree for instructions on setting it up.

[[sharing-development-examples]]
Examples
--------

[[maintaining-topic-branches]]
Maintaining topic branches for a Linux subsystem maintainer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This describes how Tony Luck uses git in his role as maintainer of the
IA64 architecture for the Linux kernel.

He uses two public branches:

 - A "test" tree into which patches are initially placed so that they
   can get some exposure when integrated with other ongoing development.
   This tree is available to Andrew for pulling into -mm whenever he
   wants.

 - A "release" tree into which tested patches are moved for final sanity
   checking, and as a vehicle to send them upstream to Linus (by sending
   him a "please pull" request.)

He also uses a set of temporary branches ("topic branches"), each
containing a logical grouping of patches.

To set this up, first create your work tree by cloning Linus's public
tree:

-------------------------------------------------
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git work
$ cd work
-------------------------------------------------

Linus's tree will be stored in the remote branch named origin/master,
and can be updated using linkgit:git-fetch[1]; you can track other
public trees using linkgit:git-remote[1] to set up a "remote" and
linkgit:git-fetch[1] to keep them up-to-date; see
<<repositories-and-branches>>.

Now create the branches in which you are going to work; these start out
at the current tip of origin/master branch, and should be set up (using
the --track option to linkgit:git-branch[1]) to merge changes in from
Linus by default.

-------------------------------------------------
$ git branch --track test origin/master
$ git branch --track release origin/master
-------------------------------------------------

These can be easily kept up to date using linkgit:git-pull[1].

-------------------------------------------------
$ git checkout test && git pull
$ git checkout release && git pull
-------------------------------------------------

Important note!  If you have any local changes in these branches, then
this merge will create a commit object in the history (with no local
changes git will simply do a "Fast forward" merge).  Many people dislike
the "noise" that this creates in the Linux history, so you should avoid
doing this capriciously in the "release" branch, as these noisy commits
will become part of the permanent history when you ask Linus to pull
from the release branch.

A few configuration variables (see linkgit:git-config[1]) can
make it easy to push both branches to your public tree.  (See
<<setting-up-a-public-repository>>.)

-------------------------------------------------
$ cat >> .git/config <<EOF
[remote "mytree"]
	url =  master.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git
	push = release
	push = test
EOF
-------------------------------------------------

Then you can push both the test and release trees using
linkgit:git-push[1]:

-------------------------------------------------
$ git push mytree
-------------------------------------------------

or push just one of the test and release branches using:

-------------------------------------------------
$ git push mytree test
-------------------------------------------------

or

-------------------------------------------------
$ git push mytree release
-------------------------------------------------

Now to apply some patches from the community.  Think of a short
snappy name for a branch to hold this patch (or related group of
patches), and create a new branch from the current tip of Linus's
branch:

-------------------------------------------------
$ git checkout -b speed-up-spinlocks origin
-------------------------------------------------

Now you apply the patch(es), run some tests, and commit the change(s).  If
the patch is a multi-part series, then you should apply each as a separate
commit to this branch.

-------------------------------------------------
$ ... patch ... test  ... commit [ ... patch ... test ... commit ]*
-------------------------------------------------

When you are happy with the state of this change, you can pull it into the
"test" branch in preparation to make it public:

-------------------------------------------------
$ git checkout test && git pull . speed-up-spinlocks
-------------------------------------------------

It is unlikely that you would have any conflicts here ... but you might if you
spent a while on this step and had also pulled new versions from upstream.

Some time later when enough time has passed and testing done, you can pull the
same branch into the "release" tree ready to go upstream.  This is where you
see the value of keeping each patch (or patch series) in its own branch.  It
means that the patches can be moved into the "release" tree in any order.

-------------------------------------------------
$ git checkout release && git pull . speed-up-spinlocks
-------------------------------------------------

After a while, you will have a number of branches, and despite the
well chosen names you picked for each of them, you may forget what
they are for, or what status they are in.  To get a reminder of what
changes are in a specific branch, use:

-------------------------------------------------
$ git log linux..branchname | git shortlog
-------------------------------------------------

To see whether it has already been merged into the test or release branches,
use:

-------------------------------------------------
$ git log test..branchname
-------------------------------------------------

or

-------------------------------------------------
$ git log release..branchname
-------------------------------------------------

(If this branch has not yet been merged, you will see some log entries.
If it has been merged, then there will be no output.)

Once a patch completes the great cycle (moving from test to release,
then pulled by Linus, and finally coming back into your local
"origin/master" branch), the branch for this change is no longer needed.
You detect this when the output from:

-------------------------------------------------
$ git log origin..branchname
-------------------------------------------------

is empty.  At this point the branch can be deleted:

-------------------------------------------------
$ git branch -d branchname
-------------------------------------------------

Some changes are so trivial that it is not necessary to create a separate
branch and then merge into each of the test and release branches.  For
these changes, just apply directly to the "release" branch, and then
merge that into the "test" branch.

To create diffstat and shortlog summaries of changes to include in a "please
pull" request to Linus you can use:

-------------------------------------------------
$ git diff --stat origin..release
-------------------------------------------------

and

-------------------------------------------------
$ git log -p origin..release | git shortlog
-------------------------------------------------

Here are some of the scripts that simplify all this even further.

-------------------------------------------------
==== update script ====
# Update a branch in my GIT tree.  If the branch to be updated
# is origin, then pull from kernel.org.  Otherwise merge
# origin/master branch into test|release branch

case "$1" in
test|release)
	git checkout $1 && git pull . origin
	;;
origin)
	before=$(git rev-parse refs/remotes/origin/master)
	git fetch origin
	after=$(git rev-parse refs/remotes/origin/master)
	if [ $before != $after ]
	then
		git log $before..$after | git shortlog
	fi
	;;
*)
	echo "Usage: $0 origin|test|release" 1>&2
	exit 1
	;;
esac
-------------------------------------------------

-------------------------------------------------
==== merge script ====
# Merge a branch into either the test or release branch

pname=$0

usage()
{
	echo "Usage: $pname branch test|release" 1>&2
	exit 1
}

git show-ref -q --verify -- refs/heads/"$1" || {
	echo "Can't see branch <$1>" 1>&2
	usage
}

case "$2" in
test|release)
	if [ $(git log $2..$1 | wc -c) -eq 0 ]
	then
		echo $1 already merged into $2 1>&2
		exit 1
	fi
	git checkout $2 && git pull . $1
	;;
*)
	usage
	;;
esac
-------------------------------------------------

-------------------------------------------------
==== status script ====
# report on status of my ia64 GIT tree

gb=$(tput setab 2)
rb=$(tput setab 1)
restore=$(tput setab 9)

if [ `git rev-list test..release | wc -c` -gt 0 ]
then
	echo $rb Warning: commits in release that are not in test $restore
	git log test..release
fi

for branch in `git show-ref --heads | sed 's|^.*/||'`
do
	if [ $branch = test -o $branch = release ]
	then
		continue
	fi

	echo -n $gb ======= $branch ====== $restore " "
	status=
	for ref in test release origin/master
	do
		if [ `git rev-list $ref..$branch | wc -c` -gt 0 ]
		then
			status=$status${ref:0:1}
		fi
	done
	case $status in
	trl)
		echo $rb Need to pull into test $restore
		;;
	rl)
		echo "In test"
		;;
	l)
		echo "Waiting for linus"
		;;
	"")
		echo $rb All done $restore
		;;
	*)
		echo $rb "<$status>" $restore
		;;
	esac
	git log origin/master..$branch | git shortlog
done
-------------------------------------------------


[[cleaning-up-history]]
Rewriting history and maintaining patch series
==============================================

Normally commits are only added to a project, never taken away or
replaced.  Git is designed with this assumption, and violating it will
cause git's merge machinery (for example) to do the wrong thing.

However, there is a situation in which it can be useful to violate this
assumption.

[[patch-series]]
Creating the perfect patch series
---------------------------------

Suppose you are a contributor to a large project, and you want to add a
complicated feature, and to present it to the other developers in a way
that makes it easy for them to read your changes, verify that they are
correct, and understand why you made each change.

If you present all of your changes as a single patch (or commit), they
may find that it is too much to digest all at once.

If you present them with the entire history of your work, complete with
mistakes, corrections, and dead ends, they may be overwhelmed.

So the ideal is usually to produce a series of patches such that:

	1. Each patch can be applied in order.

	2. Each patch includes a single logical change, together with a
	   message explaining the change.

	3. No patch introduces a regression: after applying any initial
	   part of the series, the resulting project still compiles and
	   works, and has no bugs that it didn't have before.

	4. The complete series produces the same end result as your own
	   (probably much messier!) development process did.

We will introduce some tools that can help you do this, explain how to
use them, and then explain some of the problems that can arise because
you are rewriting history.

[[using-git-rebase]]
Keeping a patch series up to date using git rebase
--------------------------------------------------

Suppose that you create a branch "mywork" on a remote-tracking branch
"origin", and create some commits on top of it:

-------------------------------------------------
$ git checkout -b mywork origin
$ vi file.txt
$ git commit
$ vi otherfile.txt
$ git commit
...
-------------------------------------------------

You have performed no merges into mywork, so it is just a simple linear
sequence of patches on top of "origin":

................................................
 o--o--o <-- origin
        \
         o--o--o <-- mywork
................................................

Some more interesting work has been done in the upstream project, and
"origin" has advanced:

................................................
 o--o--O--o--o--o <-- origin
        \
         a--b--c <-- mywork
................................................

At this point, you could use "pull" to merge your changes back in;
the result would create a new merge commit, like this:

................................................
 o--o--O--o--o--o <-- origin
        \        \
         a--b--c--m <-- mywork
................................................

However, if you prefer to keep the history in mywork a simple series of
commits without any merges, you may instead choose to use
linkgit:git-rebase[1]:

-------------------------------------------------
$ git checkout mywork
$ git rebase origin
-------------------------------------------------

This will remove each of your commits from mywork, temporarily saving
them as patches (in a directory named ".git/rebase-apply"), update mywork to
point at the latest version of origin, then apply each of the saved
patches to the new mywork.  The result will look like:


................................................
 o--o--O--o--o--o <-- origin
		 \
		  a'--b'--c' <-- mywork
................................................

In the process, it may discover conflicts.  In that case it will stop
and allow you to fix the conflicts; after fixing conflicts, use `git add`
to update the index with those contents, and then, instead of
running `git commit`, just run

-------------------------------------------------
$ git rebase --continue
-------------------------------------------------

and git will continue applying the rest of the patches.

At any point you may use the `--abort` option to abort this process and
return mywork to the state it had before you started the rebase:

-------------------------------------------------
$ git rebase --abort
-------------------------------------------------

[[rewriting-one-commit]]
Rewriting a single commit
-------------------------

We saw in <<fixing-a-mistake-by-rewriting-history>> that you can replace the
most recent commit using

-------------------------------------------------
$ git commit --amend
-------------------------------------------------

which will replace the old commit by a new commit incorporating your
changes, giving you a chance to edit the old commit message first.

You can also use a combination of this and linkgit:git-rebase[1] to
replace a commit further back in your history and recreate the
intervening changes on top of it.  First, tag the problematic commit
with

-------------------------------------------------
$ git tag bad mywork~5
-------------------------------------------------

(Either gitk or `git log` may be useful for finding the commit.)

Then check out that commit, edit it, and rebase the rest of the series
on top of it (note that we could check out the commit on a temporary
branch, but instead we're using a <<detached-head,detached head>>):

-------------------------------------------------
$ git checkout bad
$ # make changes here and update the index
$ git commit --amend
$ git rebase --onto HEAD bad mywork
-------------------------------------------------

When you're done, you'll be left with mywork checked out, with the top
patches on mywork reapplied on top of your modified commit.  You can
then clean up with

-------------------------------------------------
$ git tag -d bad
-------------------------------------------------

Note that the immutable nature of git history means that you haven't really
"modified" existing commits; instead, you have replaced the old commits with
new commits having new object names.

[[reordering-patch-series]]
Reordering or selecting from a patch series
-------------------------------------------

Given one existing commit, the linkgit:git-cherry-pick[1] command
allows you to apply the change introduced by that commit and create a
new commit that records it.  So, for example, if "mywork" points to a
series of patches on top of "origin", you might do something like:

-------------------------------------------------
$ git checkout -b mywork-new origin
$ gitk origin..mywork &
-------------------------------------------------

and browse through the list of patches in the mywork branch using gitk,
applying them (possibly in a different order) to mywork-new using
cherry-pick, and possibly modifying them as you go using `git commit --amend`.
The linkgit:git-gui[1] command may also help as it allows you to
individually select diff hunks for inclusion in the index (by
right-clicking on the diff hunk and choosing "Stage Hunk for Commit").

Another technique is to use `git format-patch` to create a series of
patches, then reset the state to before the patches:

-------------------------------------------------
$ git format-patch origin
$ git reset --hard origin
-------------------------------------------------

Then modify, reorder, or eliminate patches as preferred before applying
them again with linkgit:git-am[1].

[[patch-series-tools]]
Other tools
-----------

There are numerous other tools, such as StGIT, which exist for the
purpose of maintaining a patch series.  These are outside of the scope of
this manual.

[[problems-With-rewriting-history]]
Problems with rewriting history
-------------------------------

The primary problem with rewriting the history of a branch has to do
with merging.  Suppose somebody fetches your branch and merges it into
their branch, with a result something like this:

................................................
 o--o--O--o--o--o <-- origin
        \        \
         t--t--t--m <-- their branch:
................................................

Then suppose you modify the last three commits:

................................................
	 o--o--o <-- new head of origin
	/
 o--o--O--o--o--o <-- old head of origin
................................................

If we examined all this history together in one repository, it will
look like:

................................................
	 o--o--o <-- new head of origin
	/
 o--o--O--o--o--o <-- old head of origin
        \        \
         t--t--t--m <-- their branch:
................................................

Git has no way of knowing that the new head is an updated version of
the old head; it treats this situation exactly the same as it would if
two developers had independently done the work on the old and new heads
in parallel.  At this point, if someone attempts to merge the new head
in to their branch, git will attempt to merge together the two (old and
new) lines of development, instead of trying to replace the old by the
new.  The results are likely to be unexpected.

You may still choose to publish branches whose history is rewritten,
and it may be useful for others to be able to fetch those branches in
order to examine or test them, but they should not attempt to pull such
branches into their own work.

For true distributed development that supports proper merging,
published branches should never be rewritten.

[[bisect-merges]]
Why bisecting merge commits can be harder than bisecting linear history
-----------------------------------------------------------------------

The linkgit:git-bisect[1] command correctly handles history that
includes merge commits.  However, when the commit that it finds is a
merge commit, the user may need to work harder than usual to figure out
why that commit introduced a problem.

Imagine this history:

................................................
      ---Z---o---X---...---o---A---C---D
          \                       /
           o---o---Y---...---o---B
................................................

Suppose that on the upper line of development, the meaning of one
of the functions that exists at Z is changed at commit X.  The
commits from Z leading to A change both the function's
implementation and all calling sites that exist at Z, as well
as new calling sites they add, to be consistent.  There is no
bug at A.

Suppose that in the meantime on the lower line of development somebody
adds a new calling site for that function at commit Y.  The
commits from Z leading to B all assume the old semantics of that
function and the callers and the callee are consistent with each
other.  There is no bug at B, either.

Suppose further that the two development lines merge cleanly at C,
so no conflict resolution is required.

Nevertheless, the code at C is broken, because the callers added
on the lower line of development have not been converted to the new
semantics introduced on the upper line of development.  So if all
you know is that D is bad, that Z is good, and that
linkgit:git-bisect[1] identifies C as the culprit, how will you
figure out that the problem is due to this change in semantics?

When the result of a `git bisect` is a non-merge commit, you should
normally be able to discover the problem by examining just that commit.
Developers can make this easy by breaking their changes into small
self-contained commits.  That won't help in the case above, however,
because the problem isn't obvious from examination of any single
commit; instead, a global view of the development is required.  To
make matters worse, the change in semantics in the problematic
function may be just one small part of the changes in the upper
line of development.

On the other hand, if instead of merging at C you had rebased the
history between Z to B on top of A, you would have gotten this
linear history:

................................................................
    ---Z---o---X--...---o---A---o---o---Y*--...---o---B*--D*
................................................................

Bisecting between Z and D* would hit a single culprit commit Y*,
and understanding why Y* was broken would probably be easier.

Partly for this reason, many experienced git users, even when
working on an otherwise merge-heavy project, keep the history
linear by rebasing against the latest upstream version before
publishing.

[[advanced-branch-management]]
Advanced branch management
==========================

[[fetching-individual-branches]]
Fetching individual branches
----------------------------

Instead of using linkgit:git-remote[1], you can also choose just
to update one branch at a time, and to store it locally under an
arbitrary name:

-------------------------------------------------
$ git fetch origin todo:my-todo-work
-------------------------------------------------

The first argument, "origin", just tells git to fetch from the
repository you originally cloned from.  The second argument tells git
to fetch the branch named "todo" from the remote repository, and to
store it locally under the name refs/heads/my-todo-work.

You can also fetch branches from other repositories; so

-------------------------------------------------
$ git fetch git://example.com/proj.git master:example-master
-------------------------------------------------

will create a new branch named "example-master" and store in it the
branch named "master" from the repository at the given URL.  If you
already have a branch named example-master, it will attempt to
<<fast-forwards,fast-forward>> to the commit given by example.com's
master branch.  In more detail:

[[fetch-fast-forwards]]
git fetch and fast-forwards
---------------------------

In the previous example, when updating an existing branch, "git fetch"
checks to make sure that the most recent commit on the remote
branch is a descendant of the most recent commit on your copy of the
branch before updating your copy of the branch to point at the new
commit.  Git calls this process a <<fast-forwards,fast forward>>.

A fast forward looks something like this:

................................................
 o--o--o--o <-- old head of the branch
           \
            o--o--o <-- new head of the branch
................................................


In some cases it is possible that the new head will *not* actually be
a descendant of the old head.  For example, the developer may have
realized she made a serious mistake, and decided to backtrack,
resulting in a situation like:

................................................
 o--o--o--o--a--b <-- old head of the branch
           \
            o--o--o <-- new head of the branch
................................................

In this case, "git fetch" will fail, and print out a warning.

In that case, you can still force git to update to the new head, as
described in the following section.  However, note that in the
situation above this may mean losing the commits labeled "a" and "b",
unless you've already created a reference of your own pointing to
them.

[[forcing-fetch]]
Forcing git fetch to do non-fast-forward updates
------------------------------------------------

If git fetch fails because the new head of a branch is not a
descendant of the old head, you may force the update with:

-------------------------------------------------
$ git fetch git://example.com/proj.git +master:refs/remotes/example/master
-------------------------------------------------

Note the addition of the "+" sign.  Alternatively, you can use the "-f"
flag to force updates of all the fetched branches, as in:

-------------------------------------------------
$ git fetch -f origin
-------------------------------------------------

Be aware that commits that the old version of example/master pointed at
may be lost, as we saw in the previous section.

[[remote-branch-configuration]]
Configuring remote branches
---------------------------

We saw above that "origin" is just a shortcut to refer to the
repository that you originally cloned from.  This information is
stored in git configuration variables, which you can see using
linkgit:git-config[1]:

-------------------------------------------------
$ git config -l
core.repositoryformatversion=0
core.filemode=true
core.logallrefupdates=true
remote.origin.url=git://git.kernel.org/pub/scm/git/git.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
-------------------------------------------------

If there are other repositories that you also use frequently, you can
create similar configuration options to save typing; for example,
after

-------------------------------------------------
$ git config remote.example.url git://example.com/proj.git
-------------------------------------------------

then the following two commands will do the same thing:

-------------------------------------------------
$ git fetch git://example.com/proj.git master:refs/remotes/example/master
$ git fetch example master:refs/remotes/example/master
-------------------------------------------------

Even better, if you add one more option:

-------------------------------------------------
$ git config remote.example.fetch master:refs/remotes/example/master
-------------------------------------------------

then the following commands will all do the same thing:

-------------------------------------------------
$ git fetch git://example.com/proj.git master:refs/remotes/example/master
$ git fetch example master:refs/remotes/example/master
$ git fetch example
-------------------------------------------------

You can also add a "+" to force the update each time:

-------------------------------------------------
$ git config remote.example.fetch +master:ref/remotes/example/master
-------------------------------------------------

Don't do this unless you're sure you won't mind "git fetch" possibly
throwing away commits on 'example/master'.

Also note that all of the above configuration can be performed by
directly editing the file .git/config instead of using
linkgit:git-config[1].

See linkgit:git-config[1] for more details on the configuration
options mentioned above.


[[git-concepts]]
Git concepts
============

Git is built on a small number of simple but powerful ideas.  While it
is possible to get things done without understanding them, you will find
git much more intuitive if you do.

We start with the most important, the  <<def_object_database,object
database>> and the <<def_index,index>>.

[[the-object-database]]
The Object Database
-------------------


We already saw in <<understanding-commits>> that all commits are stored
under a 40-digit "object name".  In fact, all the information needed to
represent the history of a project is stored in objects with such names.
In each case the name is calculated by taking the SHA1 hash of the
contents of the object.  The SHA1 hash is a cryptographic hash function.
What that means to us is that it is impossible to find two different
objects with the same name.  This has a number of advantages; among
others:

- Git can quickly determine whether two objects are identical or not,
  just by comparing names.
- Since object names are computed the same way in every repository, the
  same content stored in two repositories will always be stored under
  the same name.
- Git can detect errors when it reads an object, by checking that the
  object's name is still the SHA1 hash of its contents.

(See <<object-details>> for the details of the object formatting and
SHA1 calculation.)

There are four different types of objects: "blob", "tree", "commit", and
"tag".

- A <<def_blob_object,"blob" object>> is used to store file data.
- A <<def_tree_object,"tree" object>> ties one or more
  "blob" objects into a directory structure. In addition, a tree object
  can refer to other tree objects, thus creating a directory hierarchy.
- A <<def_commit_object,"commit" object>> ties such directory hierarchies
  together into a <<def_DAG,directed acyclic graph>> of revisions--each
  commit contains the object name of exactly one tree designating the
  directory hierarchy at the time of the commit. In addition, a commit
  refers to "parent" commit objects that describe the history of how we
  arrived at that directory hierarchy.
- A <<def_tag_object,"tag" object>> symbolically identifies and can be
  used to sign other objects. It contains the object name and type of
  another object, a symbolic name (of course!) and, optionally, a
  signature.

The object types in some more detail:

[[commit-object]]
Commit Object
~~~~~~~~~~~~~

The "commit" object links a physical state of a tree with a description
of how we got there and why.  Use the --pretty=raw option to
linkgit:git-show[1] or linkgit:git-log[1] to examine your favorite
commit:

------------------------------------------------
$ git show -s --pretty=raw 2be7fcb476
commit 2be7fcb4764f2dbcee52635b91fedb1b3dcf7ab4
tree fb3a8bdd0ceddd019615af4d57a53f43d8cee2bf
parent 257a84d9d02e90447b149af58b271c19405edb6a
author Dave Watson <dwatson@mimvista.com> 1187576872 -0400
committer Junio C Hamano <gitster@pobox.com> 1187591163 -0700

    Fix misspelling of 'suppress' in docs

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
------------------------------------------------

As you can see, a commit is defined by:

- a tree: The SHA1 name of a tree object (as defined below), representing
  the contents of a directory at a certain point in time.
- parent(s): The SHA1 name of some number of commits which represent the
  immediately previous step(s) in the history of the project.  The
  example above has one parent; merge commits may have more than
  one.  A commit with no parents is called a "root" commit, and
  represents the initial revision of a project.  Each project must have
  at least one root.  A project can also have multiple roots, though
  that isn't common (or necessarily a good idea).
- an author: The name of the person responsible for this change, together
  with its date.
- a committer: The name of the person who actually created the commit,
  with the date it was done.  This may be different from the author, for
  example, if the author was someone who wrote a patch and emailed it
  to the person who used it to create the commit.
- a comment describing this commit.

Note that a commit does not itself contain any information about what
actually changed; all changes are calculated by comparing the contents
of the tree referred to by this commit with the trees associated with
its parents.  In particular, git does not attempt to record file renames
explicitly, though it can identify cases where the existence of the same
file data at changing paths suggests a rename.  (See, for example, the
-M option to linkgit:git-diff[1]).

A commit is usually created by linkgit:git-commit[1], which creates a
commit whose parent is normally the current HEAD, and whose tree is
taken from the content currently stored in the index.

[[tree-object]]
Tree Object
~~~~~~~~~~~

The ever-versatile linkgit:git-show[1] command can also be used to
examine tree objects, but linkgit:git-ls-tree[1] will give you more
details:

------------------------------------------------
$ git ls-tree fb3a8bdd0ce
100644 blob 63c918c667fa005ff12ad89437f2fdc80926e21c    .gitignore
100644 blob 5529b198e8d14decbe4ad99db3f7fb632de0439d    .mailmap
100644 blob 6ff87c4664981e4397625791c8ea3bbb5f2279a3    COPYING
040000 tree 2fb783e477100ce076f6bf57e4a6f026013dc745    Documentation
100755 blob 3c0032cec592a765692234f1cba47dfdcc3a9200    GIT-VERSION-GEN
100644 blob 289b046a443c0647624607d471289b2c7dcd470b    INSTALL
100644 blob 4eb463797adc693dc168b926b6932ff53f17d0b1    Makefile
100644 blob 548142c327a6790ff8821d67c2ee1eff7a656b52    README
...
------------------------------------------------

As you can see, a tree object contains a list of entries, each with a
mode, object type, SHA1 name, and name, sorted by name.  It represents
the contents of a single directory tree.

The object type may be a blob, representing the contents of a file, or
another tree, representing the contents of a subdirectory.  Since trees
and blobs, like all other objects, are named by the SHA1 hash of their
contents, two trees have the same SHA1 name if and only if their
contents (including, recursively, the contents of all subdirectories)
are identical.  This allows git to quickly determine the differences
between two related tree objects, since it can ignore any entries with
identical object names.

(Note: in the presence of submodules, trees may also have commits as
entries.  See <<submodules>> for documentation.)

Note that the files all have mode 644 or 755: git actually only pays
attention to the executable bit.

[[blob-object]]
Blob Object
~~~~~~~~~~~

You can use linkgit:git-show[1] to examine the contents of a blob; take,
for example, the blob in the entry for "COPYING" from the tree above:

------------------------------------------------
$ git show 6ff87c4664

 Note that the only valid version of the GPL as far as this project
 is concerned is _this_ particular version of the license (ie v2, not
 v2.2 or v3.x or whatever), unless explicitly otherwise stated.
...
------------------------------------------------

A "blob" object is nothing but a binary blob of data.  It doesn't refer
to anything else or have attributes of any kind.

Since the blob is entirely defined by its data, if two files in a
directory tree (or in multiple different versions of the repository)
have the same contents, they will share the same blob object. The object
is totally independent of its location in the directory tree, and
renaming a file does not change the object that file is associated with.

Note that any tree or blob object can be examined using
linkgit:git-show[1] with the <revision>:<path> syntax.  This can
sometimes be useful for browsing the contents of a tree that is not
currently checked out.

[[trust]]
Trust
~~~~~

If you receive the SHA1 name of a blob from one source, and its contents
from another (possibly untrusted) source, you can still trust that those
contents are correct as long as the SHA1 name agrees.  This is because
the SHA1 is designed so that it is infeasible to find different contents
that produce the same hash.

Similarly, you need only trust the SHA1 name of a top-level tree object
to trust the contents of the entire directory that it refers to, and if
you receive the SHA1 name of a commit from a trusted source, then you
can easily verify the entire history of commits reachable through
parents of that commit, and all of those contents of the trees referred
to by those commits.

So to introduce some real trust in the system, the only thing you need
to do is to digitally sign just 'one' special note, which includes the
name of a top-level commit.  Your digital signature shows others
that you trust that commit, and the immutability of the history of
commits tells others that they can trust the whole history.

In other words, you can easily validate a whole archive by just
sending out a single email that tells the people the name (SHA1 hash)
of the top commit, and digitally sign that email using something
like GPG/PGP.

To assist in this, git also provides the tag object...

[[tag-object]]
Tag Object
~~~~~~~~~~

A tag object contains an object, object type, tag name, the name of the
person ("tagger") who created the tag, and a message, which may contain
a signature, as can be seen using linkgit:git-cat-file[1]:

------------------------------------------------
$ git cat-file tag v1.5.0
object 437b1b20df4b356c9342dac8d38849f24ef44f27
type commit
tag v1.5.0
tagger Junio C Hamano <junkio@cox.net> 1171411200 +0000

GIT 1.5.0
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQBF0lGqwMbZpPMRm5oRAuRiAJ9ohBLd7s2kqjkKlq1qqC57SbnmzQCdG4ui
nLE/L9aUXdWeTFPron96DLA=
=2E+0
-----END PGP SIGNATURE-----
------------------------------------------------

See the linkgit:git-tag[1] command to learn how to create and verify tag
objects.  (Note that linkgit:git-tag[1] can also be used to create
"lightweight tags", which are not tag objects at all, but just simple
references whose names begin with "refs/tags/").

[[pack-files]]
How git stores objects efficiently: pack files
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Newly created objects are initially created in a file named after the
object's SHA1 hash (stored in .git/objects).

Unfortunately this system becomes inefficient once a project has a
lot of objects.  Try this on an old project:

------------------------------------------------
$ git count-objects
6930 objects, 47620 kilobytes
------------------------------------------------

The first number is the number of objects which are kept in
individual files.  The second is the amount of space taken up by
those "loose" objects.

You can save space and make git faster by moving these loose objects in
to a "pack file", which stores a group of objects in an efficient
compressed format; the details of how pack files are formatted can be
found in link:technical/pack-format.txt[technical/pack-format.txt].

To put the loose objects into a pack, just run git repack:

------------------------------------------------
$ git repack
Generating pack...
Done counting 6020 objects.
Deltifying 6020 objects.
 100% (6020/6020) done
Writing 6020 objects.
 100% (6020/6020) done
Total 6020, written 6020 (delta 4070), reused 0 (delta 0)
Pack pack-3e54ad29d5b2e05838c75df582c65257b8d08e1c created.
------------------------------------------------

You can then run

------------------------------------------------
$ git prune
------------------------------------------------

to remove any of the "loose" objects that are now contained in the
pack.  This will also remove any unreferenced objects (which may be
created when, for example, you use "git reset" to remove a commit).
You can verify that the loose objects are gone by looking at the
.git/objects directory or by running

------------------------------------------------
$ git count-objects
0 objects, 0 kilobytes
------------------------------------------------

Although the object files are gone, any commands that refer to those
objects will work exactly as they did before.

The linkgit:git-gc[1] command performs packing, pruning, and more for
you, so is normally the only high-level command you need.

[[dangling-objects]]
Dangling objects
~~~~~~~~~~~~~~~~

The linkgit:git-fsck[1] command will sometimes complain about dangling
objects.  They are not a problem.

The most common cause of dangling objects is that you've rebased a
branch, or you have pulled from somebody else who rebased a branch--see
<<cleaning-up-history>>.  In that case, the old head of the original
branch still exists, as does everything it pointed to. The branch
pointer itself just doesn't, since you replaced it with another one.

There are also other situations that cause dangling objects. For
example, a "dangling blob" may arise because you did a "git add" of a
file, but then, before you actually committed it and made it part of the
bigger picture, you changed something else in that file and committed
that *updated* thing--the old state that you added originally ends up
not being pointed to by any commit or tree, so it's now a dangling blob
object.

Similarly, when the "recursive" merge strategy runs, and finds that
there are criss-cross merges and thus more than one merge base (which is
fairly unusual, but it does happen), it will generate one temporary
midway tree (or possibly even more, if you had lots of criss-crossing
merges and more than two merge bases) as a temporary internal merge
base, and again, those are real objects, but the end result will not end
up pointing to them, so they end up "dangling" in your repository.

Generally, dangling objects aren't anything to worry about. They can
even be very useful: if you screw something up, the dangling objects can
be how you recover your old tree (say, you did a rebase, and realized
that you really didn't want to--you can look at what dangling objects
you have, and decide to reset your head to some old dangling state).

For commits, you can just use:

------------------------------------------------
$ gitk <dangling-commit-sha-goes-here> --not --all
------------------------------------------------

This asks for all the history reachable from the given commit but not
from any branch, tag, or other reference.  If you decide it's something
you want, you can always create a new reference to it, e.g.,

------------------------------------------------
$ git branch recovered-branch <dangling-commit-sha-goes-here>
------------------------------------------------

For blobs and trees, you can't do the same, but you can still examine
them.  You can just do

------------------------------------------------
$ git show <dangling-blob/tree-sha-goes-here>
------------------------------------------------

to show what the contents of the blob were (or, for a tree, basically
what the "ls" for that directory was), and that may give you some idea
of what the operation was that left that dangling object.

Usually, dangling blobs and trees aren't very interesting. They're
almost always the result of either being a half-way mergebase (the blob
will often even have the conflict markers from a merge in it, if you
have had conflicting merges that you fixed up by hand), or simply
because you interrupted a "git fetch" with ^C or something like that,
leaving _some_ of the new objects in the object database, but just
dangling and useless.

Anyway, once you are sure that you're not interested in any dangling
state, you can just prune all unreachable objects:

------------------------------------------------
$ git prune
------------------------------------------------

and they'll be gone. But you should only run "git prune" on a quiescent
repository--it's kind of like doing a filesystem fsck recovery: you
don't want to do that while the filesystem is mounted.

(The same is true of "git fsck" itself, btw, but since
`git fsck` never actually *changes* the repository, it just reports
on what it found, `git fsck` itself is never 'dangerous' to run.
Running it while somebody is actually changing the repository can cause
confusing and scary messages, but it won't actually do anything bad. In
contrast, running "git prune" while somebody is actively changing the
repository is a *BAD* idea).

[[recovering-from-repository-corruption]]
Recovering from repository corruption
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

By design, git treats data trusted to it with caution.  However, even in
the absence of bugs in git itself, it is still possible that hardware or
operating system errors could corrupt data.

The first defense against such problems is backups.  You can back up a
git directory using clone, or just using cp, tar, or any other backup
mechanism.

As a last resort, you can search for the corrupted objects and attempt
to replace them by hand.  Back up your repository before attempting this
in case you corrupt things even more in the process.

We'll assume that the problem is a single missing or corrupted blob,
which is sometimes a solvable problem.  (Recovering missing trees and
especially commits is *much* harder).

Before starting, verify that there is corruption, and figure out where
it is with linkgit:git-fsck[1]; this may be time-consuming.

Assume the output looks like this:

------------------------------------------------
$ git fsck --full
broken link from    tree 2d9263c6d23595e7cb2a21e5ebbb53655278dff8
              to    blob 4b9458b3786228369c63936db65827de3cc06200
missing blob 4b9458b3786228369c63936db65827de3cc06200
------------------------------------------------

(Typically there will be some "dangling object" messages too, but they
aren't interesting.)

Now you know that blob 4b9458b3 is missing, and that the tree 2d9263c6
points to it.  If you could find just one copy of that missing blob
object, possibly in some other repository, you could move it into
.git/objects/4b/9458b3... and be done.  Suppose you can't.  You can
still examine the tree that pointed to it with linkgit:git-ls-tree[1],
which might output something like:

------------------------------------------------
$ git ls-tree 2d9263c6d23595e7cb2a21e5ebbb53655278dff8
100644 blob 8d14531846b95bfa3564b58ccfb7913a034323b8	.gitignore
100644 blob ebf9bf84da0aab5ed944264a5db2a65fe3a3e883	.mailmap
100644 blob ca442d313d86dc67e0a2e5d584b465bd382cbf5c	COPYING
...
100644 blob 4b9458b3786228369c63936db65827de3cc06200	myfile
...
------------------------------------------------

So now you know that the missing blob was the data for a file named
"myfile".  And chances are you can also identify the directory--let's
say it's in "somedirectory".  If you're lucky the missing copy might be
the same as the copy you have checked out in your working tree at
"somedirectory/myfile"; you can test whether that's right with
linkgit:git-hash-object[1]:

------------------------------------------------
$ git hash-object -w somedirectory/myfile
------------------------------------------------

which will create and store a blob object with the contents of
somedirectory/myfile, and output the sha1 of that object.  if you're
extremely lucky it might be 4b9458b3786228369c63936db65827de3cc06200, in
which case you've guessed right, and the corruption is fixed!

Otherwise, you need more information.  How do you tell which version of
the file has been lost?

The easiest way to do this is with:

------------------------------------------------
$ git log --raw --all --full-history -- somedirectory/myfile
------------------------------------------------

Because you're asking for raw output, you'll now get something like

------------------------------------------------
commit abc
Author:
Date:
...
:100644 100644 4b9458b... newsha... M somedirectory/myfile


commit xyz
Author:
Date:

...
:100644 100644 oldsha... 4b9458b... M somedirectory/myfile
------------------------------------------------

This tells you that the immediately preceding version of the file was
"newsha", and that the immediately following version was "oldsha".
You also know the commit messages that went with the change from oldsha
to 4b9458b and with the change from 4b9458b to newsha.

If you've been committing small enough changes, you may now have a good
shot at reconstructing the contents of the in-between state 4b9458b.

If you can do that, you can now recreate the missing object with

------------------------------------------------
$ git hash-object -w <recreated-file>
------------------------------------------------

and your repository is good again!

(Btw, you could have ignored the fsck, and started with doing a

------------------------------------------------
$ git log --raw --all
------------------------------------------------

and just looked for the sha of the missing object (4b9458b..) in that
whole thing. It's up to you - git does *have* a lot of information, it is
just missing one particular blob version.

[[the-index]]
The index
-----------

The index is a binary file (generally kept in .git/index) containing a
sorted list of path names, each with permissions and the SHA1 of a blob
object; linkgit:git-ls-files[1] can show you the contents of the index:

-------------------------------------------------
$ git ls-files --stage
100644 63c918c667fa005ff12ad89437f2fdc80926e21c 0	.gitignore
100644 5529b198e8d14decbe4ad99db3f7fb632de0439d 0	.mailmap
100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 0	COPYING
100644 a37b2152bd26be2c2289e1f57a292534a51a93c7 0	Documentation/.gitignore
100644 fbefe9a45b00a54b58d94d06eca48b03d40a50e0 0	Documentation/Makefile
...
100644 2511aef8d89ab52be5ec6a5e46236b4b6bcd07ea 0	xdiff/xtypes.h
100644 2ade97b2574a9f77e7ae4002a4e07a6a38e46d07 0	xdiff/xutils.c
100644 d5de8292e05e7c36c4b68857c1cf9855e3d2f70a 0	xdiff/xutils.h
-------------------------------------------------

Note that in older documentation you may see the index called the
"current directory cache" or just the "cache".  It has three important
properties:

1. The index contains all the information necessary to generate a single
(uniquely determined) tree object.
+
For example, running linkgit:git-commit[1] generates this tree object
from the index, stores it in the object database, and uses it as the
tree object associated with the new commit.

2. The index enables fast comparisons between the tree object it defines
and the working tree.
+
It does this by storing some additional data for each entry (such as
the last modified time).  This data is not displayed above, and is not
stored in the created tree object, but it can be used to determine
quickly which files in the working directory differ from what was
stored in the index, and thus save git from having to read all of the
data from such files to look for changes.

3. It can efficiently represent information about merge conflicts
between different tree objects, allowing each pathname to be
associated with sufficient information about the trees involved that
you can create a three-way merge between them.
+
We saw in <<conflict-resolution>> that during a merge the index can
store multiple versions of a single file (called "stages").  The third
column in the linkgit:git-ls-files[1] output above is the stage
number, and will take on values other than 0 for files with merge
conflicts.

The index is thus a sort of temporary staging area, which is filled with
a tree which you are in the process of working on.

If you blow the index away entirely, you generally haven't lost any
information as long as you have the name of the tree that it described.

[[submodules]]
Submodules
==========

Large projects are often composed of smaller, self-contained modules.  For
example, an embedded Linux distribution's source tree would include every
piece of software in the distribution with some local modifications; a movie
player might need to build against a specific, known-working version of a
decompression library; several independent programs might all share the same
build scripts.

With centralized revision control systems this is often accomplished by
including every module in one single repository.  Developers can check out
all modules or only the modules they need to work with.  They can even modify
files across several modules in a single commit while moving things around
or updating APIs and translations.

Git does not allow partial checkouts, so duplicating this approach in Git
would force developers to keep a local copy of modules they are not
interested in touching.  Commits in an enormous checkout would be slower
than you'd expect as Git would have to scan every directory for changes.
If modules have a lot of local history, clones would take forever.

On the plus side, distributed revision control systems can much better
integrate with external sources.  In a centralized model, a single arbitrary
snapshot of the external project is exported from its own revision control
and then imported into the local revision control on a vendor branch.  All
the history is hidden.  With distributed revision control you can clone the
entire external history and much more easily follow development and re-merge
local changes.

Git's submodule support allows a repository to contain, as a subdirectory, a
checkout of an external project.  Submodules maintain their own identity;
the submodule support just stores the submodule repository location and
commit ID, so other developers who clone the containing project
("superproject") can easily clone all the submodules at the same revision.
Partial checkouts of the superproject are possible: you can tell Git to
clone none, some or all of the submodules.

The linkgit:git-submodule[1] command is available since Git 1.5.3.  Users
with Git 1.5.2 can look up the submodule commits in the repository and
manually check them out; earlier versions won't recognize the submodules at
all.

To see how submodule support works, create (for example) four example
repositories that can be used later as a submodule:

-------------------------------------------------
$ mkdir ~/git
$ cd ~/git
$ for i in a b c d
do
	mkdir $i
	cd $i
	git init
	echo "module $i" > $i.txt
	git add $i.txt
	git commit -m "Initial commit, submodule $i"
	cd ..
done
-------------------------------------------------

Now create the superproject and add all the submodules:

-------------------------------------------------
$ mkdir super
$ cd super
$ git init
$ for i in a b c d
do
	git submodule add ~/git/$i $i
done
-------------------------------------------------

NOTE: Do not use local URLs here if you plan to publish your superproject!

See what files `git submodule` created:

-------------------------------------------------
$ ls -a
.  ..  .git  .gitmodules  a  b  c  d
-------------------------------------------------

The `git submodule add <repo> <path>` command does a couple of things:

- It clones the submodule from <repo> to the given <path> under the
  current directory and by default checks out the master branch.
- It adds the submodule's clone path to the linkgit:gitmodules[5] file and
  adds this file to the index, ready to be committed.
- It adds the submodule's current commit ID to the index, ready to be
  committed.

Commit the superproject:

-------------------------------------------------
$ git commit -m "Add submodules a, b, c and d."
-------------------------------------------------

Now clone the superproject:

-------------------------------------------------
$ cd ..
$ git clone super cloned
$ cd cloned
-------------------------------------------------

The submodule directories are there, but they're empty:

-------------------------------------------------
$ ls -a a
.  ..
$ git submodule status
-d266b9873ad50488163457f025db7cdd9683d88b a
-e81d457da15309b4fef4249aba9b50187999670d b
-c1536a972b9affea0f16e0680ba87332dc059146 c
-d96249ff5d57de5de093e6baff9e0aafa5276a74 d
-------------------------------------------------

NOTE: The commit object names shown above would be different for you, but they
should match the HEAD commit object names of your repositories.  You can check
it by running `git ls-remote ../a`.

Pulling down the submodules is a two-step process. First run `git submodule
init` to add the submodule repository URLs to `.git/config`:

-------------------------------------------------
$ git submodule init
-------------------------------------------------

Now use `git submodule update` to clone the repositories and check out the
commits specified in the superproject:

-------------------------------------------------
$ git submodule update
$ cd a
$ ls -a
.  ..  .git  a.txt
-------------------------------------------------

One major difference between `git submodule update` and `git submodule add` is
that `git submodule update` checks out a specific commit, rather than the tip
of a branch. It's like checking out a tag: the head is detached, so you're not
working on a branch.

-------------------------------------------------
$ git branch
* (no branch)
  master
-------------------------------------------------

If you want to make a change within a submodule and you have a detached head,
then you should create or checkout a branch, make your changes, publish the
change within the submodule, and then update the superproject to reference the
new commit:

-------------------------------------------------
$ git checkout master
-------------------------------------------------

or

-------------------------------------------------
$ git checkout -b fix-up
-------------------------------------------------

then

-------------------------------------------------
$ echo "adding a line again" >> a.txt
$ git commit -a -m "Updated the submodule from within the superproject."
$ git push
$ cd ..
$ git diff
diff --git a/a b/a
index d266b98..261dfac 160000
--- a/a
+++ b/a
@@ -1 +1 @@
-Subproject commit d266b9873ad50488163457f025db7cdd9683d88b
+Subproject commit 261dfac35cb99d380eb966e102c1197139f7fa24
$ git add a
$ git commit -m "Updated submodule a."
$ git push
-------------------------------------------------

You have to run `git submodule update` after `git pull` if you want to update
submodules, too.

Pitfalls with submodules
------------------------

Always publish the submodule change before publishing the change to the
superproject that references it. If you forget to publish the submodule change,
others won't be able to clone the repository:

-------------------------------------------------
$ cd ~/git/super/a
$ echo i added another line to this file >> a.txt
$ git commit -a -m "doing it wrong this time"
$ cd ..
$ git add a
$ git commit -m "Updated submodule a again."
$ git push
$ cd ~/git/cloned
$ git pull
$ git submodule update
error: pathspec '261dfac35cb99d380eb966e102c1197139f7fa24' did not match any file(s) known to git.
Did you forget to 'git add'?
Unable to checkout '261dfac35cb99d380eb966e102c1197139f7fa24' in submodule path 'a'
-------------------------------------------------

You also should not rewind branches in a submodule beyond commits that were
ever recorded in any superproject.

It's not safe to run `git submodule update` if you've made and committed
changes within a submodule without checking out a branch first. They will be
silently overwritten:

-------------------------------------------------
$ cat a.txt
module a
$ echo line added from private2 >> a.txt
$ git commit -a -m "line added inside private2"
$ cd ..
$ git submodule update
Submodule path 'a': checked out 'd266b9873ad50488163457f025db7cdd9683d88b'
$ cd a
$ cat a.txt
module a
-------------------------------------------------

NOTE: The changes are still visible in the submodule's reflog.

This is not the case if you did not commit your changes.

[[low-level-operations]]
Low-level git operations
========================

Many of the higher-level commands were originally implemented as shell
scripts using a smaller core of low-level git commands.  These can still
be useful when doing unusual things with git, or just as a way to
understand its inner workings.

[[object-manipulation]]
Object access and manipulation
------------------------------

The linkgit:git-cat-file[1] command can show the contents of any object,
though the higher-level linkgit:git-show[1] is usually more useful.

The linkgit:git-commit-tree[1] command allows constructing commits with
arbitrary parents and trees.

A tree can be created with linkgit:git-write-tree[1] and its data can be
accessed by linkgit:git-ls-tree[1].  Two trees can be compared with
linkgit:git-diff-tree[1].

A tag is created with linkgit:git-mktag[1], and the signature can be
verified by linkgit:git-verify-tag[1], though it is normally simpler to
use linkgit:git-tag[1] for both.

[[the-workflow]]
The Workflow
------------

High-level operations such as linkgit:git-commit[1],
linkgit:git-checkout[1] and linkgit:git-reset[1] work by moving data
between the working tree, the index, and the object database.  Git
provides low-level operations which perform each of these steps
individually.

Generally, all "git" operations work on the index file. Some operations
work *purely* on the index file (showing the current state of the
index), but most operations move data between the index file and either
the database or the working directory. Thus there are four main
combinations:

[[working-directory-to-index]]
working directory -> index
~~~~~~~~~~~~~~~~~~~~~~~~~~

The linkgit:git-update-index[1] command updates the index with
information from the working directory.  You generally update the
index information by just specifying the filename you want to update,
like so:

-------------------------------------------------
$ git update-index filename
-------------------------------------------------

but to avoid common mistakes with filename globbing etc, the command
will not normally add totally new entries or remove old entries,
i.e. it will normally just update existing cache entries.

To tell git that yes, you really do realize that certain files no
longer exist, or that new files should be added, you
should use the `--remove` and `--add` flags respectively.

NOTE! A `--remove` flag does 'not' mean that subsequent filenames will
necessarily be removed: if the files still exist in your directory
structure, the index will be updated with their new status, not
removed. The only thing `--remove` means is that update-index will be
considering a removed file to be a valid thing, and if the file really
does not exist any more, it will update the index accordingly.

As a special case, you can also do `git update-index --refresh`, which
will refresh the "stat" information of each index to match the current
stat information. It will 'not' update the object status itself, and
it will only update the fields that are used to quickly test whether
an object still matches its old backing store object.

The previously introduced linkgit:git-add[1] is just a wrapper for
linkgit:git-update-index[1].

[[index-to-object-database]]
index -> object database
~~~~~~~~~~~~~~~~~~~~~~~~

You write your current index file to a "tree" object with the program

-------------------------------------------------
$ git write-tree
-------------------------------------------------

that doesn't come with any options--it will just write out the
current index into the set of tree objects that describe that state,
and it will return the name of the resulting top-level tree. You can
use that tree to re-generate the index at any time by going in the
other direction:

[[object-database-to-index]]
object database -> index
~~~~~~~~~~~~~~~~~~~~~~~~

You read a "tree" file from the object database, and use that to
populate (and overwrite--don't do this if your index contains any
unsaved state that you might want to restore later!) your current
index.  Normal operation is just

-------------------------------------------------
$ git read-tree <sha1 of tree>
-------------------------------------------------

and your index file will now be equivalent to the tree that you saved
earlier. However, that is only your 'index' file: your working
directory contents have not been modified.

[[index-to-working-directory]]
index -> working directory
~~~~~~~~~~~~~~~~~~~~~~~~~~

You update your working directory from the index by "checking out"
files. This is not a very common operation, since normally you'd just
keep your files updated, and rather than write to your working
directory, you'd tell the index files about the changes in your
working directory (i.e. `git update-index`).

However, if you decide to jump to a new version, or check out somebody
else's version, or just restore a previous tree, you'd populate your
index file with read-tree, and then you need to check out the result
with

-------------------------------------------------
$ git checkout-index filename
-------------------------------------------------

or, if you want to check out all of the index, use `-a`.

NOTE! `git checkout-index` normally refuses to overwrite old files, so
if you have an old version of the tree already checked out, you will
need to use the "-f" flag ('before' the "-a" flag or the filename) to
'force' the checkout.


Finally, there are a few odds and ends which are not purely moving
from one representation to the other:

[[tying-it-all-together]]
Tying it all together
~~~~~~~~~~~~~~~~~~~~~

To commit a tree you have instantiated with "git write-tree", you'd
create a "commit" object that refers to that tree and the history
behind it--most notably the "parent" commits that preceded it in
history.

Normally a "commit" has one parent: the previous state of the tree
before a certain change was made. However, sometimes it can have two
or more parent commits, in which case we call it a "merge", due to the
fact that such a commit brings together ("merges") two or more
previous states represented by other commits.

In other words, while a "tree" represents a particular directory state
of a working directory, a "commit" represents that state in "time",
and explains how we got there.

You create a commit object by giving it the tree that describes the
state at the time of the commit, and a list of parents:

-------------------------------------------------
$ git commit-tree <tree> -p <parent> [-p <parent2> ..]
-------------------------------------------------

and then giving the reason for the commit on stdin (either through
redirection from a pipe or file, or by just typing it at the tty).

`git commit-tree` will return the name of the object that represents
that commit, and you should save it away for later use. Normally,
you'd commit a new `HEAD` state, and while git doesn't care where you
save the note about that state, in practice we tend to just write the
result to the file pointed at by `.git/HEAD`, so that we can always see
what the last committed state was.

Here is an ASCII art by Jon Loeliger that illustrates how
various pieces fit together.

------------

                     commit-tree
                      commit obj
                       +----+
                       |    |
                       |    |
                       V    V
                    +-----------+
                    | Object DB |
                    |  Backing  |
                    |   Store   |
                    +-----------+
                       ^
           write-tree  |     |
             tree obj  |     |
                       |     |  read-tree
                       |     |  tree obj
                             V
                    +-----------+
                    |   Index   |
                    |  "cache"  |
                    +-----------+
         update-index  ^
             blob obj  |     |
                       |     |
    checkout-index -u  |     |  checkout-index
             stat      |     |  blob obj
                             V
                    +-----------+
                    |  Working  |
                    | Directory |
                    +-----------+

------------


[[examining-the-data]]
Examining the data
------------------

You can examine the data represented in the object database and the
index with various helper tools. For every object, you can use
linkgit:git-cat-file[1] to examine details about the
object:

-------------------------------------------------
$ git cat-file -t <objectname>
-------------------------------------------------

shows the type of the object, and once you have the type (which is
usually implicit in where you find the object), you can use

-------------------------------------------------
$ git cat-file blob|tree|commit|tag <objectname>
-------------------------------------------------

to show its contents. NOTE! Trees have binary content, and as a result
there is a special helper for showing that content, called
`git ls-tree`, which turns the binary content into a more easily
readable form.

It's especially instructive to look at "commit" objects, since those
tend to be small and fairly self-explanatory. In particular, if you
follow the convention of having the top commit name in `.git/HEAD`,
you can do

-------------------------------------------------
$ git cat-file commit HEAD
-------------------------------------------------

to see what the top commit was.

[[merging-multiple-trees]]
Merging multiple trees
----------------------

Git helps you do a three-way merge, which you can expand to n-way by
repeating the merge procedure arbitrary times until you finally
"commit" the state.  The normal situation is that you'd only do one
three-way merge (two parents), and commit it, but if you like to, you
can do multiple parents in one go.

To do a three-way merge, you need the two sets of "commit" objects
that you want to merge, use those to find the closest common parent (a
third "commit" object), and then use those commit objects to find the
state of the directory ("tree" object) at these points.

To get the "base" for the merge, you first look up the common parent
of two commits with

-------------------------------------------------
$ git merge-base <commit1> <commit2>
-------------------------------------------------

which will return you the commit they are both based on.  You should
now look up the "tree" objects of those commits, which you can easily
do with (for example)

-------------------------------------------------
$ git cat-file commit <commitname> | head -1
-------------------------------------------------

since the tree object information is always the first line in a commit
object.

Once you know the three trees you are going to merge (the one "original"
tree, aka the common tree, and the two "result" trees, aka the branches
you want to merge), you do a "merge" read into the index. This will
complain if it has to throw away your old index contents, so you should
make sure that you've committed those--in fact you would normally
always do a merge against your last commit (which should thus match what
you have in your current index anyway).

To do the merge, do

-------------------------------------------------
$ git read-tree -m -u <origtree> <yourtree> <targettree>
-------------------------------------------------

which will do all trivial merge operations for you directly in the
index file, and you can just write the result out with
`git write-tree`.


[[merging-multiple-trees-2]]
Merging multiple trees, continued
---------------------------------

Sadly, many merges aren't trivial. If there are files that have
been added, moved or removed, or if both branches have modified the
same file, you will be left with an index tree that contains "merge
entries" in it. Such an index tree can 'NOT' be written out to a tree
object, and you will have to resolve any such merge clashes using
other tools before you can write out the result.

You can examine such index state with `git ls-files --unmerged`
command.  An example:

------------------------------------------------
$ git read-tree -m $orig HEAD $target
$ git ls-files --unmerged
100644 263414f423d0e4d70dae8fe53fa34614ff3e2860 1	hello.c
100644 06fa6a24256dc7e560efa5687fa84b51f0263c3a 2	hello.c
100644 cc44c73eb783565da5831b4d820c962954019b69 3	hello.c
------------------------------------------------

Each line of the `git ls-files --unmerged` output begins with
the blob mode bits, blob SHA1, 'stage number', and the
filename.  The 'stage number' is git's way to say which tree it
came from: stage 1 corresponds to `$orig` tree, stage 2 `HEAD`
tree, and stage3 `$target` tree.

Earlier we said that trivial merges are done inside
`git read-tree -m`.  For example, if the file did not change
from `$orig` to `HEAD` nor `$target`, or if the file changed
from `$orig` to `HEAD` and `$orig` to `$target` the same way,
obviously the final outcome is what is in `HEAD`.  What the
above example shows is that file `hello.c` was changed from
`$orig` to `HEAD` and `$orig` to `$target` in a different way.
You could resolve this by running your favorite 3-way merge
program, e.g.  `diff3`, `merge`, or git's own merge-file, on
the blob objects from these three stages yourself, like this:

------------------------------------------------
$ git cat-file blob 263414f... >hello.c~1
$ git cat-file blob 06fa6a2... >hello.c~2
$ git cat-file blob cc44c73... >hello.c~3
$ git merge-file hello.c~2 hello.c~1 hello.c~3
------------------------------------------------

This would leave the merge result in `hello.c~2` file, along
with conflict markers if there are conflicts.  After verifying
the merge result makes sense, you can tell git what the final
merge result for this file is by:

-------------------------------------------------
$ mv -f hello.c~2 hello.c
$ git update-index hello.c
-------------------------------------------------

When a path is in the "unmerged" state, running `git update-index` for
that path tells git to mark the path resolved.

The above is the description of a git merge at the lowest level,
to help you understand what conceptually happens under the hood.
In practice, nobody, not even git itself, runs `git cat-file` three times
for this.  There is a `git merge-index` program that extracts the
stages to temporary files and calls a "merge" script on it:

-------------------------------------------------
$ git merge-index git-merge-one-file hello.c
-------------------------------------------------

and that is what higher level `git merge -s resolve` is implemented with.

[[hacking-git]]
Hacking git
===========

This chapter covers internal details of the git implementation which
probably only git developers need to understand.

[[object-details]]
Object storage format
---------------------

All objects have a statically determined "type" which identifies the
format of the object (i.e. how it is used, and how it can refer to other
objects).  There are currently four different object types: "blob",
"tree", "commit", and "tag".

Regardless of object type, all objects share the following
characteristics: they are all deflated with zlib, and have a header
that not only specifies their type, but also provides size information
about the data in the object.  It's worth noting that the SHA1 hash
that is used to name the object is the hash of the original data
plus this header, so `sha1sum` 'file' does not match the object name
for 'file'.
(Historical note: in the dawn of the age of git the hash
was the sha1 of the 'compressed' object.)

As a result, the general consistency of an object can always be tested
independently of the contents or the type of the object: all objects can
be validated by verifying that (a) their hashes match the content of the
file and (b) the object successfully inflates to a stream of bytes that
forms a sequence of <ascii type without space> {plus} <space> {plus} <ascii decimal
size> {plus} <byte\0> {plus} <binary object data>.

The structured objects can further have their structure and
connectivity to other objects verified. This is generally done with
the `git fsck` program, which generates a full dependency graph
of all objects, and verifies their internal consistency (in addition
to just verifying their superficial consistency through the hash).

[[birdview-on-the-source-code]]
A birds-eye view of Git's source code
-------------------------------------

It is not always easy for new developers to find their way through Git's
source code.  This section gives you a little guidance to show where to
start.

A good place to start is with the contents of the initial commit, with:

----------------------------------------------------
$ git checkout e83c5163
----------------------------------------------------

The initial revision lays the foundation for almost everything git has
today, but is small enough to read in one sitting.

Note that terminology has changed since that revision.  For example, the
README in that revision uses the word "changeset" to describe what we
now call a <<def_commit_object,commit>>.

Also, we do not call it "cache" any more, but rather "index"; however, the
file is still called `cache.h`.  Remark: Not much reason to change it now,
especially since there is no good single name for it anyway, because it is
basically _the_ header file which is included by _all_ of Git's C sources.

If you grasp the ideas in that initial commit, you should check out a
more recent version and skim `cache.h`, `object.h` and `commit.h`.

In the early days, Git (in the tradition of UNIX) was a bunch of programs
which were extremely simple, and which you used in scripts, piping the
output of one into another. This turned out to be good for initial
development, since it was easier to test new things.  However, recently
many of these parts have become builtins, and some of the core has been
"libified", i.e. put into libgit.a for performance, portability reasons,
and to avoid code duplication.

By now, you know what the index is (and find the corresponding data
structures in `cache.h`), and that there are just a couple of object types
(blobs, trees, commits and tags) which inherit their common structure from
`struct object`, which is their first member (and thus, you can cast e.g.
`(struct object *)commit` to achieve the _same_ as `&commit->object`, i.e.
get at the object name and flags).

Now is a good point to take a break to let this information sink in.

Next step: get familiar with the object naming.  Read <<naming-commits>>.
There are quite a few ways to name an object (and not only revisions!).
All of these are handled in `sha1_name.c`. Just have a quick look at
the function `get_sha1()`. A lot of the special handling is done by
functions like `get_sha1_basic()` or the likes.

This is just to get you into the groove for the most libified part of Git:
the revision walker.

Basically, the initial version of `git log` was a shell script:

----------------------------------------------------------------
$ git-rev-list --pretty $(git-rev-parse --default HEAD "$@") | \
	LESS=-S ${PAGER:-less}
----------------------------------------------------------------

What does this mean?

`git rev-list` is the original version of the revision walker, which
_always_ printed a list of revisions to stdout.  It is still functional,
and needs to, since most new Git programs start out as scripts using
`git rev-list`.

`git rev-parse` is not as important any more; it was only used to filter out
options that were relevant for the different plumbing commands that were
called by the script.

Most of what `git rev-list` did is contained in `revision.c` and
`revision.h`.  It wraps the options in a struct named `rev_info`, which
controls how and what revisions are walked, and more.

The original job of `git rev-parse` is now taken by the function
`setup_revisions()`, which parses the revisions and the common command line
options for the revision walker. This information is stored in the struct
`rev_info` for later consumption. You can do your own command line option
parsing after calling `setup_revisions()`. After that, you have to call
`prepare_revision_walk()` for initialization, and then you can get the
commits one by one with the function `get_revision()`.

If you are interested in more details of the revision walking process,
just have a look at the first implementation of `cmd_log()`; call
`git show v1.3.0{tilde}155^2{tilde}4` and scroll down to that function (note that you
no longer need to call `setup_pager()` directly).

Nowadays, `git log` is a builtin, which means that it is _contained_ in the
command `git`.  The source side of a builtin is

- a function called `cmd_<bla>`, typically defined in `builtin-<bla>.c`,
  and declared in `builtin.h`,

- an entry in the `commands[]` array in `git.c`, and

- an entry in `BUILTIN_OBJECTS` in the `Makefile`.

Sometimes, more than one builtin is contained in one source file.  For
example, `cmd_whatchanged()` and `cmd_log()` both reside in `builtin-log.c`,
since they share quite a bit of code.  In that case, the commands which are
_not_ named like the `.c` file in which they live have to be listed in
`BUILT_INS` in the `Makefile`.

`git log` looks more complicated in C than it does in the original script,
but that allows for a much greater flexibility and performance.

Here again it is a good point to take a pause.

Lesson three is: study the code.  Really, it is the best way to learn about
the organization of Git (after you know the basic concepts).

So, think about something which you are interested in, say, "how can I
access a blob just knowing the object name of it?".  The first step is to
find a Git command with which you can do it.  In this example, it is either
`git show` or `git cat-file`.

For the sake of clarity, let's stay with `git cat-file`, because it

- is plumbing, and

- was around even in the initial commit (it literally went only through
  some 20 revisions as `cat-file.c`, was renamed to `builtin-cat-file.c`
  when made a builtin, and then saw less than 10 versions).

So, look into `builtin-cat-file.c`, search for `cmd_cat_file()` and look what
it does.

------------------------------------------------------------------
        git_config(git_default_config);
        if (argc != 3)
		usage("git cat-file [-t|-s|-e|-p|<type>] <sha1>");
        if (get_sha1(argv[2], sha1))
                die("Not a valid object name %s", argv[2]);
------------------------------------------------------------------

Let's skip over the obvious details; the only really interesting part
here is the call to `get_sha1()`.  It tries to interpret `argv[2]` as an
object name, and if it refers to an object which is present in the current
repository, it writes the resulting SHA-1 into the variable `sha1`.

Two things are interesting here:

- `get_sha1()` returns 0 on _success_.  This might surprise some new
  Git hackers, but there is a long tradition in UNIX to return different
  negative numbers in case of different errors--and 0 on success.

- the variable `sha1` in the function signature of `get_sha1()` is `unsigned
  char \*`, but is actually expected to be a pointer to `unsigned
  char[20]`.  This variable will contain the 160-bit SHA-1 of the given
  commit.  Note that whenever a SHA-1 is passed as `unsigned char \*`, it
  is the binary representation, as opposed to the ASCII representation in
  hex characters, which is passed as `char *`.

You will see both of these things throughout the code.

Now, for the meat:

-----------------------------------------------------------------------------
        case 0:
                buf = read_object_with_reference(sha1, argv[1], &size, NULL);
-----------------------------------------------------------------------------

This is how you read a blob (actually, not only a blob, but any type of
object).  To know how the function `read_object_with_reference()` actually
works, find the source code for it (something like `git grep
read_object_with | grep ":[a-z]"` in the git repository), and read
the source.

To find out how the result can be used, just read on in `cmd_cat_file()`:

-----------------------------------
        write_or_die(1, buf, size);
-----------------------------------

Sometimes, you do not know where to look for a feature.  In many such cases,
it helps to search through the output of `git log`, and then `git show` the
corresponding commit.

Example: If you know that there was some test case for `git bundle`, but
do not remember where it was (yes, you _could_ `git grep bundle t/`, but that
does not illustrate the point!):

------------------------
$ git log --no-merges t/
------------------------

In the pager (`less`), just search for "bundle", go a few lines back,
and see that it is in commit 18449ab0...  Now just copy this object name,
and paste it into the command line

-------------------
$ git show 18449ab0
-------------------

Voila.

Another example: Find out what to do in order to make some script a
builtin:

-------------------------------------------------
$ git log --no-merges --diff-filter=A builtin-*.c
-------------------------------------------------

You see, Git is actually the best tool to find out about the source of Git
itself!

[[glossary]]
GIT Glossary
============

include::glossary-content.txt[]

[[git-quick-start]]
Appendix A: Git Quick Reference
===============================

This is a quick summary of the major commands; the previous chapters
explain how these work in more detail.

[[quick-creating-a-new-repository]]
Creating a new repository
-------------------------

From a tarball:

-----------------------------------------------
$ tar xzf project.tar.gz
$ cd project
$ git init
Initialized empty Git repository in .git/
$ git add .
$ git commit
-----------------------------------------------

From a remote repository:

-----------------------------------------------
$ git clone git://example.com/pub/project.git
$ cd project
-----------------------------------------------

[[managing-branches]]
Managing branches
-----------------

-----------------------------------------------
$ git branch	     # list all local branches in this repo
$ git checkout test  # switch working directory to branch "test"
$ git branch new     # create branch "new" starting at current HEAD
$ git branch -d new  # delete branch "new"
-----------------------------------------------

Instead of basing a new branch on current HEAD (the default), use:

-----------------------------------------------
$ git branch new test    # branch named "test"
$ git branch new v2.6.15 # tag named v2.6.15
$ git branch new HEAD^   # commit before the most recent
$ git branch new HEAD^^  # commit before that
$ git branch new test~10 # ten commits before tip of branch "test"
-----------------------------------------------

Create and switch to a new branch at the same time:

-----------------------------------------------
$ git checkout -b new v2.6.15
-----------------------------------------------

Update and examine branches from the repository you cloned from:

-----------------------------------------------
$ git fetch		# update
$ git branch -r		# list
  origin/master
  origin/next
  ...
$ git checkout -b masterwork origin/master
-----------------------------------------------

Fetch a branch from a different repository, and give it a new
name in your repository:

-----------------------------------------------
$ git fetch git://example.com/project.git theirbranch:mybranch
$ git fetch git://example.com/project.git v2.6.15:mybranch
-----------------------------------------------

Keep a list of repositories you work with regularly:

-----------------------------------------------
$ git remote add example git://example.com/project.git
$ git remote			# list remote repositories
example
origin
$ git remote show example	# get details
* remote example
  URL: git://example.com/project.git
  Tracked remote branches
    master
    next
    ...
$ git fetch example		# update branches from example
$ git branch -r			# list all remote branches
-----------------------------------------------


[[exploring-history]]
Exploring history
-----------------

-----------------------------------------------
$ gitk			    # visualize and browse history
$ git log		    # list all commits
$ git log src/		    # ...modifying src/
$ git log v2.6.15..v2.6.16  # ...in v2.6.16, not in v2.6.15
$ git log master..test	    # ...in branch test, not in branch master
$ git log test..master	    # ...in branch master, but not in test
$ git log test...master	    # ...in one branch, not in both
$ git log -S'foo()'	    # ...where difference contain "foo()"
$ git log --since="2 weeks ago"
$ git log -p		    # show patches as well
$ git show		    # most recent commit
$ git diff v2.6.15..v2.6.16 # diff between two tagged versions
$ git diff v2.6.15..HEAD    # diff with current head
$ git grep "foo()"	    # search working directory for "foo()"
$ git grep v2.6.15 "foo()"  # search old tree for "foo()"
$ git show v2.6.15:a.txt    # look at old version of a.txt
-----------------------------------------------

Search for regressions:

-----------------------------------------------
$ git bisect start
$ git bisect bad		# current version is bad
$ git bisect good v2.6.13-rc2	# last known good revision
Bisecting: 675 revisions left to test after this
				# test here, then:
$ git bisect good		# if this revision is good, or
$ git bisect bad		# if this revision is bad.
				# repeat until done.
-----------------------------------------------

[[making-changes]]
Making changes
--------------

Make sure git knows who to blame:

------------------------------------------------
$ cat >>~/.gitconfig <<\EOF
[user]
	name = Your Name Comes Here
	email = you@yourdomain.example.com
EOF
------------------------------------------------

Select file contents to include in the next commit, then make the
commit:

-----------------------------------------------
$ git add a.txt    # updated file
$ git add b.txt    # new file
$ git rm c.txt     # old file
$ git commit
-----------------------------------------------

Or, prepare and create the commit in one step:

-----------------------------------------------
$ git commit d.txt # use latest content only of d.txt
$ git commit -a	   # use latest content of all tracked files
-----------------------------------------------

[[merging]]
Merging
-------

-----------------------------------------------
$ git merge test   # merge branch "test" into the current branch
$ git pull git://example.com/project.git master
		   # fetch and merge in remote branch
$ git pull . test  # equivalent to git merge test
-----------------------------------------------

[[sharing-your-changes]]
Sharing your changes
--------------------

Importing or exporting patches:

-----------------------------------------------
$ git format-patch origin..HEAD # format a patch for each commit
				# in HEAD but not in origin
$ git am mbox # import patches from the mailbox "mbox"
-----------------------------------------------

Fetch a branch in a different git repository, then merge into the
current branch:

-----------------------------------------------
$ git pull git://example.com/project.git theirbranch
-----------------------------------------------

Store the fetched branch into a local branch before merging into the
current branch:

-----------------------------------------------
$ git pull git://example.com/project.git theirbranch:mybranch
-----------------------------------------------

After creating commits on a local branch, update the remote
branch with your commits:

-----------------------------------------------
$ git push ssh://example.com/project.git mybranch:theirbranch
-----------------------------------------------

When remote and local branch are both named "test":

-----------------------------------------------
$ git push ssh://example.com/project.git test
-----------------------------------------------

Shortcut version for a frequently used remote repository:

-----------------------------------------------
$ git remote add example ssh://example.com/project.git
$ git push example test
-----------------------------------------------

[[repository-maintenance]]
Repository maintenance
----------------------

Check for corruption:

-----------------------------------------------
$ git fsck
-----------------------------------------------

Recompress, remove unused cruft:

-----------------------------------------------
$ git gc
-----------------------------------------------


[[todo]]
Appendix B: Notes and todo list for this manual
===============================================

This is a work in progress.

The basic requirements:

- It must be readable in order, from beginning to end, by someone
  intelligent with a basic grasp of the UNIX command line, but without
  any special knowledge of git.  If necessary, any other prerequisites
  should be specifically mentioned as they arise.
- Whenever possible, section headings should clearly describe the task
  they explain how to do, in language that requires no more knowledge
  than necessary: for example, "importing patches into a project" rather
  than "the `git am` command"

Think about how to create a clear chapter dependency graph that will
allow people to get to important topics without necessarily reading
everything in between.

Scan Documentation/ for other stuff left out; in particular:

- howto's
- some of technical/?
- hooks
- list of commands in linkgit:git[1]

Scan email archives for other stuff left out

Scan man pages to see if any assume more background than this manual
provides.

Simplify beginning by suggesting disconnected head instead of
temporary branch creation?

Add more good examples.  Entire sections of just cookbook examples
might be a good idea; maybe make an "advanced examples" section a
standard end-of-chapter section?

Include cross-references to the glossary, where appropriate.

Document shallow clones?  See draft 1.5.0 release notes for some
documentation.

Add a section on working with other version control systems, including
CVS, Subversion, and just imports of series of release tarballs.

More details on gitweb?

Write a chapter on using plumbing and writing scripts.

Alternates, clone -reference, etc.

More on recovery from repository corruption.  See:
	http://marc.theaimsgroup.com/?l=git&m=117263864820799&w=2
	http://marc.theaimsgroup.com/?l=git&m=117147855503798&w=2
