git(1)
======

NAME
----
git - the stupid content tracker


SYNOPSIS
--------
[verse]
'git' [--version] [--exec-path[=<path>]] [--html-path]
    [-p|--paginate|--no-pager] [--no-replace-objects]
    [--bare] [--git-dir=<path>] [--work-tree=<path>]
    [-c <name>=<value>]
    [--help] <command> [<args>]

DESCRIPTION
-----------
Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

See linkgit:gittutorial[7] to get started, then see
link:everyday.html[Everyday Git] for a useful minimum set of commands, and
"man git-commandname" for documentation of each command.  CVS users may
also want to read linkgit:gitcvs-migration[7].  See
the link:user-manual.html[Git User's Manual] for a more in-depth
introduction.

The '<command>' is either a name of a Git command (see below) or an alias
as defined in the configuration file (see linkgit:git-config[1]).

Formatted and hyperlinked version of the latest git
documentation can be viewed at
`http://www.kernel.org/pub/software/scm/git/docs/`.

ifdef::stalenotes[]
[NOTE]
============

You are reading the documentation for the latest (possibly
unreleased) version of git, that is available from 'master'
branch of the `git.git` repository.
Documentation for older releases are available here:

* link:v1.7.4.3/git.html[documentation for release 1.7.4.3]

* release notes for
  link:RelNotes/1.7.4.3.txt[1.7.4.3],
  link:RelNotes/1.7.4.2.txt[1.7.4.2],
  link:RelNotes/1.7.4.1.txt[1.7.4.1],
  link:RelNotes/1.7.4.txt[1.7.4].

* link:v1.7.3.5/git.html[documentation for release 1.7.3.5]

* release notes for
  link:RelNotes/1.7.3.5.txt[1.7.3.5],
  link:RelNotes/1.7.3.4.txt[1.7.3.4],
  link:RelNotes/1.7.3.3.txt[1.7.3.3],
  link:RelNotes/1.7.3.2.txt[1.7.3.2],
  link:RelNotes/1.7.3.1.txt[1.7.3.1],
  link:RelNotes/1.7.3.txt[1.7.3].

* link:v1.7.2.5/git.html[documentation for release 1.7.2.5]

* release notes for
  link:RelNotes/1.7.2.5.txt[1.7.2.5],
  link:RelNotes/1.7.2.4.txt[1.7.2.4],
  link:RelNotes/1.7.2.3.txt[1.7.2.3],
  link:RelNotes/1.7.2.2.txt[1.7.2.2],
  link:RelNotes/1.7.2.1.txt[1.7.2.1],
  link:RelNotes/1.7.2.txt[1.7.2].

* link:v1.7.1.4/git.html[documentation for release 1.7.1.4]

* release notes for
  link:RelNotes/1.7.1.4.txt[1.7.1.4],
  link:RelNotes/1.7.1.3.txt[1.7.1.3],
  link:RelNotes/1.7.1.2.txt[1.7.1.2],
  link:RelNotes/1.7.1.1.txt[1.7.1.1],
  link:RelNotes/1.7.1.txt[1.7.1].

* link:v1.7.0.9/git.html[documentation for release 1.7.0.9]

* release notes for
  link:RelNotes/1.7.0.9.txt[1.7.0.9],
  link:RelNotes/1.7.0.8.txt[1.7.0.8],
  link:RelNotes/1.7.0.7.txt[1.7.0.7],
  link:RelNotes/1.7.0.6.txt[1.7.0.6],
  link:RelNotes/1.7.0.5.txt[1.7.0.5],
  link:RelNotes/1.7.0.4.txt[1.7.0.4],
  link:RelNotes/1.7.0.3.txt[1.7.0.3],
  link:RelNotes/1.7.0.2.txt[1.7.0.2],
  link:RelNotes/1.7.0.1.txt[1.7.0.1],
  link:RelNotes/1.7.0.txt[1.7.0].

* link:v1.6.6.3/git.html[documentation for release 1.6.6.3]

* release notes for
  link:RelNotes/1.6.6.3.txt[1.6.6.3],
  link:RelNotes/1.6.6.2.txt[1.6.6.2],
  link:RelNotes/1.6.6.1.txt[1.6.6.1],
  link:RelNotes/1.6.6.txt[1.6.6].

* link:v1.6.5.9/git.html[documentation for release 1.6.5.9]

* release notes for
  link:RelNotes/1.6.5.9.txt[1.6.5.9],
  link:RelNotes/1.6.5.8.txt[1.6.5.8],
  link:RelNotes/1.6.5.7.txt[1.6.5.7],
  link:RelNotes/1.6.5.6.txt[1.6.5.6],
  link:RelNotes/1.6.5.5.txt[1.6.5.5],
  link:RelNotes/1.6.5.4.txt[1.6.5.4],
  link:RelNotes/1.6.5.3.txt[1.6.5.3],
  link:RelNotes/1.6.5.2.txt[1.6.5.2],
  link:RelNotes/1.6.5.1.txt[1.6.5.1],
  link:RelNotes/1.6.5.txt[1.6.5].

* link:v1.6.4.5/git.html[documentation for release 1.6.4.5]

* release notes for
  link:RelNotes/1.6.4.5.txt[1.6.4.5],
  link:RelNotes/1.6.4.4.txt[1.6.4.4],
  link:RelNotes/1.6.4.3.txt[1.6.4.3],
  link:RelNotes/1.6.4.2.txt[1.6.4.2],
  link:RelNotes/1.6.4.1.txt[1.6.4.1],
  link:RelNotes/1.6.4.txt[1.6.4].

* link:v1.6.3.4/git.html[documentation for release 1.6.3.4]

* release notes for
  link:RelNotes/1.6.3.4.txt[1.6.3.4],
  link:RelNotes/1.6.3.3.txt[1.6.3.3],
  link:RelNotes/1.6.3.2.txt[1.6.3.2],
  link:RelNotes/1.6.3.1.txt[1.6.3.1],
  link:RelNotes/1.6.3.txt[1.6.3].

* release notes for
  link:RelNotes/1.6.2.5.txt[1.6.2.5],
  link:RelNotes/1.6.2.4.txt[1.6.2.4],
  link:RelNotes/1.6.2.3.txt[1.6.2.3],
  link:RelNotes/1.6.2.2.txt[1.6.2.2],
  link:RelNotes/1.6.2.1.txt[1.6.2.1],
  link:RelNotes/1.6.2.txt[1.6.2].

* link:v1.6.1.3/git.html[documentation for release 1.6.1.3]

* release notes for
  link:RelNotes/1.6.1.3.txt[1.6.1.3],
  link:RelNotes/1.6.1.2.txt[1.6.1.2],
  link:RelNotes/1.6.1.1.txt[1.6.1.1],
  link:RelNotes/1.6.1.txt[1.6.1].

* link:v1.6.0.6/git.html[documentation for release 1.6.0.6]

* release notes for
  link:RelNotes/1.6.0.6.txt[1.6.0.6],
  link:RelNotes/1.6.0.5.txt[1.6.0.5],
  link:RelNotes/1.6.0.4.txt[1.6.0.4],
  link:RelNotes/1.6.0.3.txt[1.6.0.3],
  link:RelNotes/1.6.0.2.txt[1.6.0.2],
  link:RelNotes/1.6.0.1.txt[1.6.0.1],
  link:RelNotes/1.6.0.txt[1.6.0].

* link:v1.5.6.6/git.html[documentation for release 1.5.6.6]

* release notes for
  link:RelNotes/1.5.6.6.txt[1.5.6.6],
  link:RelNotes/1.5.6.5.txt[1.5.6.5],
  link:RelNotes/1.5.6.4.txt[1.5.6.4],
  link:RelNotes/1.5.6.3.txt[1.5.6.3],
  link:RelNotes/1.5.6.2.txt[1.5.6.2],
  link:RelNotes/1.5.6.1.txt[1.5.6.1],
  link:RelNotes/1.5.6.txt[1.5.6].

* link:v1.5.5.6/git.html[documentation for release 1.5.5.6]

* release notes for
  link:RelNotes/1.5.5.6.txt[1.5.5.6],
  link:RelNotes/1.5.5.5.txt[1.5.5.5],
  link:RelNotes/1.5.5.4.txt[1.5.5.4],
  link:RelNotes/1.5.5.3.txt[1.5.5.3],
  link:RelNotes/1.5.5.2.txt[1.5.5.2],
  link:RelNotes/1.5.5.1.txt[1.5.5.1],
  link:RelNotes/1.5.5.txt[1.5.5].

* link:v1.5.4.7/git.html[documentation for release 1.5.4.7]

* release notes for
  link:RelNotes/1.5.4.7.txt[1.5.4.7],
  link:RelNotes/1.5.4.6.txt[1.5.4.6],
  link:RelNotes/1.5.4.5.txt[1.5.4.5],
  link:RelNotes/1.5.4.4.txt[1.5.4.4],
  link:RelNotes/1.5.4.3.txt[1.5.4.3],
  link:RelNotes/1.5.4.2.txt[1.5.4.2],
  link:RelNotes/1.5.4.1.txt[1.5.4.1],
  link:RelNotes/1.5.4.txt[1.5.4].

* link:v1.5.3.8/git.html[documentation for release 1.5.3.8]

* release notes for
  link:RelNotes/1.5.3.8.txt[1.5.3.8],
  link:RelNotes/1.5.3.7.txt[1.5.3.7],
  link:RelNotes/1.5.3.6.txt[1.5.3.6],
  link:RelNotes/1.5.3.5.txt[1.5.3.5],
  link:RelNotes/1.5.3.4.txt[1.5.3.4],
  link:RelNotes/1.5.3.3.txt[1.5.3.3],
  link:RelNotes/1.5.3.2.txt[1.5.3.2],
  link:RelNotes/1.5.3.1.txt[1.5.3.1],
  link:RelNotes/1.5.3.txt[1.5.3].

* link:v1.5.2.5/git.html[documentation for release 1.5.2.5]

* release notes for
  link:RelNotes/1.5.2.5.txt[1.5.2.5],
  link:RelNotes/1.5.2.4.txt[1.5.2.4],
  link:RelNotes/1.5.2.3.txt[1.5.2.3],
  link:RelNotes/1.5.2.2.txt[1.5.2.2],
  link:RelNotes/1.5.2.1.txt[1.5.2.1],
  link:RelNotes/1.5.2.txt[1.5.2].

* link:v1.5.1.6/git.html[documentation for release 1.5.1.6]

* release notes for
  link:RelNotes/1.5.1.6.txt[1.5.1.6],
  link:RelNotes/1.5.1.5.txt[1.5.1.5],
  link:RelNotes/1.5.1.4.txt[1.5.1.4],
  link:RelNotes/1.5.1.3.txt[1.5.1.3],
  link:RelNotes/1.5.1.2.txt[1.5.1.2],
  link:RelNotes/1.5.1.1.txt[1.5.1.1],
  link:RelNotes/1.5.1.txt[1.5.1].

* link:v1.5.0.7/git.html[documentation for release 1.5.0.7]

* release notes for
  link:RelNotes/1.5.0.7.txt[1.5.0.7],
  link:RelNotes/1.5.0.6.txt[1.5.0.6],
  link:RelNotes/1.5.0.5.txt[1.5.0.5],
  link:RelNotes/1.5.0.3.txt[1.5.0.3],
  link:RelNotes/1.5.0.2.txt[1.5.0.2],
  link:RelNotes/1.5.0.1.txt[1.5.0.1],
  link:RelNotes/1.5.0.txt[1.5.0].

* documentation for release link:v1.4.4.4/git.html[1.4.4.4],
  link:v1.3.3/git.html[1.3.3],
  link:v1.2.6/git.html[1.2.6],
  link:v1.0.13/git.html[1.0.13].

============

endif::stalenotes[]

OPTIONS
-------
--version::
	Prints the git suite version that the 'git' program came from.

--help::
	Prints the synopsis and a list of the most commonly used
	commands. If the option '--all' or '-a' is given then all
	available commands are printed. If a git command is named this
	option will bring up the manual page for that command.
+
Other options are available to control how the manual page is
displayed. See linkgit:git-help[1] for more information,
because `git --help ...` is converted internally into `git
help ...`.

-c <name>=<value>::
	Pass a configuration parameter to the command. The value
	given will override values from configuration files.
	The <name> is expected in the same format as listed by
	'git config' (subkeys separated by dots).

--exec-path[=<path>]::
	Path to wherever your core git programs are installed.
	This can also be controlled by setting the GIT_EXEC_PATH
	environment variable. If no path is given, 'git' will print
	the current setting and then exit.

--html-path::
	Print the path to wherever your git HTML documentation is installed
	and exit.

-p::
--paginate::
	Pipe all output into 'less' (or if set, $PAGER) if standard
	output is a terminal.  This overrides the `pager.<cmd>`
	configuration options (see the "Configuration Mechanism" section
	below).

--no-pager::
	Do not pipe git output into a pager.

--git-dir=<path>::
	Set the path to the repository. This can also be controlled by
	setting the GIT_DIR environment variable. It can be an absolute
	path or relative path to current working directory.

--work-tree=<path>::
	Set the path to the working tree. It can be an absolute path
	or a path relative to the current working directory.
	This can also be controlled by setting the GIT_WORK_TREE
	environment variable and the core.worktree configuration
	variable (see core.worktree in linkgit:git-config[1] for a
	more detailed discussion).

--bare::
	Treat the repository as a bare repository.  If GIT_DIR
	environment is not set, it is set to the current working
	directory.

--no-replace-objects::
	Do not use replacement refs to replace git objects. See
	linkgit:git-replace[1] for more information.


FURTHER DOCUMENTATION
---------------------

See the references above to get started using git.  The following is
probably more detail than necessary for a first-time user.

The link:user-manual.html#git-concepts[git concepts chapter of the
user-manual] and linkgit:gitcore-tutorial[7] both provide
introductions to the underlying git architecture.

See linkgit:gitworkflows[7] for an overview of recommended workflows.

See also the link:howto-index.html[howto] documents for some useful
examples.

The internals are documented in the
link:technical/api-index.html[GIT API documentation].

GIT COMMANDS
------------

We divide git into high level ("porcelain") commands and low level
("plumbing") commands.

High-level commands (porcelain)
-------------------------------

We separate the porcelain commands into the main commands and some
ancillary user utilities.

Main porcelain commands
~~~~~~~~~~~~~~~~~~~~~~~

include::cmds-mainporcelain.txt[]

Ancillary Commands
~~~~~~~~~~~~~~~~~~
Manipulators:

include::cmds-ancillarymanipulators.txt[]

Interrogators:

include::cmds-ancillaryinterrogators.txt[]


Interacting with Others
~~~~~~~~~~~~~~~~~~~~~~~

These commands are to interact with foreign SCM and with other
people via patch over e-mail.

include::cmds-foreignscminterface.txt[]


Low-level commands (plumbing)
-----------------------------

Although git includes its
own porcelain layer, its low-level commands are sufficient to support
development of alternative porcelains.  Developers of such porcelains
might start by reading about linkgit:git-update-index[1] and
linkgit:git-read-tree[1].

The interface (input, output, set of options and the semantics)
to these low-level commands are meant to be a lot more stable
than Porcelain level commands, because these commands are
primarily for scripted use.  The interface to Porcelain commands
on the other hand are subject to change in order to improve the
end user experience.

The following description divides
the low-level commands into commands that manipulate objects (in
the repository, index, and working tree), commands that interrogate and
compare objects, and commands that move objects and references between
repositories.


Manipulation commands
~~~~~~~~~~~~~~~~~~~~~

include::cmds-plumbingmanipulators.txt[]


Interrogation commands
~~~~~~~~~~~~~~~~~~~~~~

include::cmds-plumbinginterrogators.txt[]

In general, the interrogate commands do not touch the files in
the working tree.


Synching repositories
~~~~~~~~~~~~~~~~~~~~~

include::cmds-synchingrepositories.txt[]

The following are helper commands used by the above; end users
typically do not use them directly.

include::cmds-synchelpers.txt[]


Internal helper commands
~~~~~~~~~~~~~~~~~~~~~~~~

These are internal helper commands used by other commands; end
users typically do not use them directly.

include::cmds-purehelpers.txt[]


Configuration Mechanism
-----------------------

Starting from 0.99.9 (actually mid 0.99.8.GIT), `.git/config` file
is used to hold per-repository configuration options.  It is a
simple text file modeled after `.ini` format familiar to some
people.  Here is an example:

------------
#
# A '#' or ';' character indicates a comment.
#

; core variables
[core]
	; Don't trust file modes
	filemode = false

; user identity
[user]
	name = "Junio C Hamano"
	email = "junkio@twinsun.com"

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

Various commands read from the configuration file and adjust
their operation accordingly.  See linkgit:git-config[1] for a
list.


Identifier Terminology
----------------------
<object>::
	Indicates the object name for any type of object.

<blob>::
	Indicates a blob object name.

<tree>::
	Indicates a tree object name.

<commit>::
	Indicates a commit object name.

<tree-ish>::
	Indicates a tree, commit or tag object name.  A
	command that takes a <tree-ish> argument ultimately wants to
	operate on a <tree> object but automatically dereferences
	<commit> and <tag> objects that point at a <tree>.

<commit-ish>::
	Indicates a commit or tag object name.  A
	command that takes a <commit-ish> argument ultimately wants to
	operate on a <commit> object but automatically dereferences
	<tag> objects that point at a <commit>.

<type>::
	Indicates that an object type is required.
	Currently one of: `blob`, `tree`, `commit`, or `tag`.

<file>::
	Indicates a filename - almost always relative to the
	root of the tree structure `GIT_INDEX_FILE` describes.

Symbolic Identifiers
--------------------
Any git command accepting any <object> can also use the following
symbolic notation:

HEAD::
	indicates the head of the current branch (i.e. the
	contents of `$GIT_DIR/HEAD`).

<tag>::
	a valid tag 'name'
	(i.e. the contents of `$GIT_DIR/refs/tags/<tag>`).

<head>::
	a valid head 'name'
	(i.e. the contents of `$GIT_DIR/refs/heads/<head>`).

For a more complete list of ways to spell object names, see
"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].


File/Directory Structure
------------------------

Please see the linkgit:gitrepository-layout[5] document.

Read linkgit:githooks[5] for more details about each hook.

Higher level SCMs may provide and manage additional information in the
`$GIT_DIR`.


Terminology
-----------
Please see linkgit:gitglossary[7].


Environment Variables
---------------------
Various git commands use the following environment variables:

The git Repository
~~~~~~~~~~~~~~~~~~
These environment variables apply to 'all' core git commands. Nb: it
is worth noting that they may be used/overridden by SCMS sitting above
git so take care if using Cogito etc.

'GIT_INDEX_FILE'::
	This environment allows the specification of an alternate
	index file. If not specified, the default of `$GIT_DIR/index`
	is used.

'GIT_OBJECT_DIRECTORY'::
	If the object storage directory is specified via this
	environment variable then the sha1 directories are created
	underneath - otherwise the default `$GIT_DIR/objects`
	directory is used.

'GIT_ALTERNATE_OBJECT_DIRECTORIES'::
	Due to the immutable nature of git objects, old objects can be
	archived into shared, read-only directories. This variable
	specifies a ":" separated (on Windows ";" separated) list
	of git object directories which can be used to search for git
	objects. New objects will not be written to these directories.

'GIT_DIR'::
	If the 'GIT_DIR' environment variable is set then it
	specifies a path to use instead of the default `.git`
	for the base of the repository.

'GIT_WORK_TREE'::
	Set the path to the working tree.  The value will not be
	used in combination with repositories found automatically in
	a .git directory (i.e. $GIT_DIR is not set).
	This can also be controlled by the '--work-tree' command line
	option and the core.worktree configuration variable.

'GIT_CEILING_DIRECTORIES'::
	This should be a colon-separated list of absolute paths.
	If set, it is a list of directories that git should not chdir
	up into while looking for a repository directory.
	It will not exclude the current working directory or
	a GIT_DIR set on the command line or in the environment.
	(Useful for excluding slow-loading network directories.)

'GIT_DISCOVERY_ACROSS_FILESYSTEM'::
	When run in a directory that does not have ".git" repository
	directory, git tries to find such a directory in the parent
	directories to find the top of the working tree, but by default it
	does not cross filesystem boundaries.  This environment variable
	can be set to true to tell git not to stop at filesystem
	boundaries.  Like 'GIT_CEILING_DIRECTORIES', this will not affect
	an explicit repository directory set via 'GIT_DIR' or on the
	command line.

git Commits
~~~~~~~~~~~
'GIT_AUTHOR_NAME'::
'GIT_AUTHOR_EMAIL'::
'GIT_AUTHOR_DATE'::
'GIT_COMMITTER_NAME'::
'GIT_COMMITTER_EMAIL'::
'GIT_COMMITTER_DATE'::
'EMAIL'::
	see linkgit:git-commit-tree[1]

git Diffs
~~~~~~~~~
'GIT_DIFF_OPTS'::
	Only valid setting is "--unified=??" or "-u??" to set the
	number of context lines shown when a unified diff is created.
	This takes precedence over any "-U" or "--unified" option
	value passed on the git diff command line.

'GIT_EXTERNAL_DIFF'::
	When the environment variable 'GIT_EXTERNAL_DIFF' is set, the
	program named by it is called, instead of the diff invocation
	described above.  For a path that is added, removed, or modified,
        'GIT_EXTERNAL_DIFF' is called with 7 parameters:

	path old-file old-hex old-mode new-file new-hex new-mode
+
where:

	<old|new>-file:: are files GIT_EXTERNAL_DIFF can use to read the
                         contents of <old|new>,
	<old|new>-hex:: are the 40-hexdigit SHA1 hashes,
	<old|new>-mode:: are the octal representation of the file modes.

+
The file parameters can point at the user's working file
(e.g. `new-file` in "git-diff-files"), `/dev/null` (e.g. `old-file`
when a new file is added), or a temporary file (e.g. `old-file` in the
index).  'GIT_EXTERNAL_DIFF' should not worry about unlinking the
temporary file --- it is removed when 'GIT_EXTERNAL_DIFF' exits.
+
For a path that is unmerged, 'GIT_EXTERNAL_DIFF' is called with 1
parameter, <path>.

other
~~~~~
'GIT_MERGE_VERBOSITY'::
	A number controlling the amount of output shown by
	the recursive merge strategy.  Overrides merge.verbosity.
	See linkgit:git-merge[1]

'GIT_PAGER'::
	This environment variable overrides `$PAGER`. If it is set
	to an empty string or to the value "cat", git will not launch
	a pager.  See also the `core.pager` option in
	linkgit:git-config[1].

'GIT_SSH'::
	If this environment variable is set then 'git fetch'
	and 'git push' will use this command instead
	of 'ssh' when they need to connect to a remote system.
	The '$GIT_SSH' command will be given exactly two arguments:
	the 'username@host' (or just 'host') from the URL and the
	shell command to execute on that remote system.
+
To pass options to the program that you want to list in GIT_SSH
you will need to wrap the program and options into a shell script,
then set GIT_SSH to refer to the shell script.
+
Usually it is easier to configure any desired options through your
personal `.ssh/config` file.  Please consult your ssh documentation
for further details.

'GIT_ASKPASS'::
	If this environment variable is set, then git commands which need to
	acquire passwords or passphrases (e.g. for HTTP or IMAP authentication)
	will call this program with a suitable prompt as command line argument
	and read the password from its STDOUT. See also the 'core.askpass'
	option in linkgit:git-config[1].

'GIT_FLUSH'::
	If this environment variable is set to "1", then commands such
	as 'git blame' (in incremental mode), 'git rev-list', 'git log',
	and 'git whatchanged' will force a flush of the output stream
	after each commit-oriented record have been flushed.   If this
	variable is set to "0", the output of these commands will be done
	using completely buffered I/O.   If this environment variable is
	not set, git will choose buffered or record-oriented flushing
	based on whether stdout appears to be redirected to a file or not.

'GIT_TRACE'::
	If this variable is set to "1", "2" or "true" (comparison
	is case insensitive), git will print `trace:` messages on
	stderr telling about alias expansion, built-in command
	execution and external command execution.
	If this variable is set to an integer value greater than 1
	and lower than 10 (strictly) then git will interpret this
	value as an open file descriptor and will try to write the
	trace messages into this file descriptor.
	Alternatively, if this variable is set to an absolute path
	(starting with a '/' character), git will interpret this
	as a file path and will try to write the trace messages
	into it.

Discussion[[Discussion]]
------------------------

More detail on the following is available from the
link:user-manual.html#git-concepts[git concepts chapter of the
user-manual] and linkgit:gitcore-tutorial[7].

A git project normally consists of a working directory with a ".git"
subdirectory at the top level.  The .git directory contains, among other
things, a compressed object database representing the complete history
of the project, an "index" file which links that history to the current
contents of the working tree, and named pointers into that history such
as tags and branch heads.

The object database contains objects of three main types: blobs, which
hold file data; trees, which point to blobs and other trees to build up
directory hierarchies; and commits, which each reference a single tree
and some number of parent commits.

The commit, equivalent to what other systems call a "changeset" or
"version", represents a step in the project's history, and each parent
represents an immediately preceding step.  Commits with more than one
parent represent merges of independent lines of development.

All objects are named by the SHA1 hash of their contents, normally
written as a string of 40 hex digits.  Such names are globally unique.
The entire history leading up to a commit can be vouched for by signing
just that commit.  A fourth object type, the tag, is provided for this
purpose.

When first created, objects are stored in individual files, but for
efficiency may later be compressed together into "pack files".

Named pointers called refs mark interesting points in history.  A ref
may contain the SHA1 name of an object or the name of another ref.  Refs
with names beginning `ref/head/` contain the SHA1 name of the most
recent commit (or "head") of a branch under development.  SHA1 names of
tags of interest are stored under `ref/tags/`.  A special ref named
`HEAD` contains the name of the currently checked-out branch.

The index file is initialized with a list of all paths and, for each
path, a blob object and a set of attributes.  The blob object represents
the contents of the file as of the head of the current branch.  The
attributes (last modified time, size, etc.) are taken from the
corresponding file in the working tree.  Subsequent changes to the
working tree can be found by comparing these attributes.  The index may
be updated with new content, and new commits may be created from the
content stored in the index.

The index is also capable of storing multiple entries (called "stages")
for a given pathname.  These stages are used to hold the various
unmerged version of a file when a merge is in progress.

Authors
-------
Git was started by Linus Torvalds, and is currently maintained by Junio
C Hamano. Numerous contributions have come from the git mailing list
<git@vger.kernel.org>. For a more complete list of contributors, see
http://git-scm.com/about. If you have a clone of git.git itself, the
output of linkgit:git-shortlog[1] and linkgit:git-blame[1] can show you
the authors for specific parts of the project.

Reporting Bugs
--------------

Report bugs to the Git mailing list <git@vger.kernel.org> where the
development and maintenance is primarily done.  You do not have to be
subscribed to the list to send a message there.

SEE ALSO
--------
linkgit:gittutorial[7], linkgit:gittutorial-2[7],
link:everyday.html[Everyday Git], linkgit:gitcvs-migration[7],
linkgit:gitglossary[7], linkgit:gitcore-tutorial[7],
linkgit:gitcli[7], link:user-manual.html[The Git User's Manual],
linkgit:gitworkflows[7]

GIT
---
Part of the linkgit:git[1] suite
