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 `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
