git(7)
======
v0.99.5, Aug 2005

NAME
----
git - the stupid content tracker


SYNOPSIS
--------
'git-<command>' <args>

DESCRIPTION
-----------

This is reference information for the core git commands.

Before reading this cover to cover, you may want to take a look
at the link:tutorial.html[tutorial] document.

The <<Discussion>> section below contains much useful definition and
clarification info - read that first.  And of the commands, I suggest
reading link:git-update-cache.html[git-update-cache] and
link:git-read-tree.html[git-read-tree] first - I wish I had!

If you are migrating from CVS, link:cvs-migration.html[cvs migration]
document may be helpful after you finish the tutorial.

After you get the general feel from the tutorial and this
overview page, you may want to take a look at the
link:howto-index.html[howto] documents.


David Greaves <david@dgreaves.com>
08/05/05

Updated by Junio C Hamano <junkio@cox.net> on 2005-05-05 to
reflect recent changes.

Commands Overview
-----------------
The git commands can helpfully be split into those that manipulate
the repository, the cache and the working fileset, those that
interrogate and compare them, and those that moves objects and
references between repositories.

In addition, git itself comes with a spartan set of porcelain
commands.  They are usable but are not meant to compete with real
Porcelains.

There are also some ancillary programs that can be viewed as useful
aids for using the core commands but which are unlikely to be used by
SCMs layered over git.

Manipulation commands
~~~~~~~~~~~~~~~~~~~~~
link:git-apply.html[git-apply]::
	Reads a "diff -up1" or git generated patch file and
	applies it to the working tree.

link:git-checkout-cache.html[git-checkout-cache]::
	Copy files from the cache to the working directory

link:git-commit-tree.html[git-commit-tree]::
	Creates a new commit object

link:git-hash-object.html[git-hash-object]::
	Computes the object ID from a file.

link:git-init-db.html[git-init-db]::
	Creates an empty git object database

link:git-merge-cache.html[git-merge-cache]::
	Runs a merge for files needing merging

link:git-mktag.html[git-mktag]::
	Creates a tag object

link:git-pack-objects.html[git-pack-objects]::
	Creates a packed archive of objects.

link:git-prune-packed.html[git-prune-packed]::
	Remove extra objects that are already in pack files.

link:git-read-tree.html[git-read-tree]::
	Reads tree information into the directory cache

link:git-unpack-objects.html[git-unpack-objects]::
	Unpacks objects out of a packed archive.

link:git-update-cache.html[git-update-cache]::
	Modifies the index or directory cache

link:git-write-tree.html[git-write-tree]::
	Creates a tree from the current cache


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

link:git-cat-file.html[git-cat-file]::
	Provide content or type information for repository objects

link:git-diff-cache.html[git-diff-cache]::
	Compares content and mode of blobs between the cache and repository

link:git-diff-files.html[git-diff-files]::
	Compares files in the working tree and the cache

link:git-diff-stages.html[git-diff-stages]::
	Compares two "merge stages" in the index file.

link:git-diff-tree.html[git-diff-tree]::
	Compares the content and mode of blobs found via two tree objects

link:git-export.html[git-export]::
	Exports each commit and a diff against each of its parents

link:git-fsck-cache.html[git-fsck-cache]::
	Verifies the connectivity and validity of the objects in the database

link:git-ls-files.html[git-ls-files]::
	Information about files in the cache/working directory

link:git-ls-tree.html[git-ls-tree]::
	Displays a tree object in human readable form

link:git-merge-base.html[git-merge-base]::
	Finds as good a common ancestor as possible for a merge

link:git-rev-list.html[git-rev-list]::
	Lists commit objects in reverse chronological order

link:git-rev-tree.html[git-rev-tree]::
	Provides the revision tree for one or more commits

link:git-show-index.html[git-show-index]::
	Displays contents of a pack idx file.

link:git-tar-tree.html[git-tar-tree]::
	Creates a tar archive of the files in the named tree

link:git-unpack-file.html[git-unpack-file]::
	Creates a temporary file with a blob's contents

link:git-var.html[git-var]::
	Displays a git logical variable

link:git-verify-pack.html[git-verify-pack]::
	Validates packed GIT archive files

The interrogate commands may create files - and you can force them to
touch the working file set - but in general they don't


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

link:git-clone-pack.html[git-clone-pack]::
	Clones a repository into the current repository (engine
	for ssh and local transport)

link:git-fetch-pack.html[git-fetch-pack]::
	Updates from a remote repository.

link:git-http-pull.html[git-http-pull]::
	Downloads a remote GIT repository via HTTP

link:git-local-pull.html[git-local-pull]::
	Duplicates another GIT repository on a local system

link:git-peek-remote.html[git-peek-remote]::
	Lists references on a remote repository using upload-pack protocol.

link:git-receive-pack.html[git-receive-pack]::
	Invoked by 'git-send-pack' to receive what is pushed to it.

link:git-send-pack.html[git-send-pack]::
	Pushes to a remote repository, intelligently.

link:git-ssh-pull.html[git-ssh-pull]::
	Pulls from a remote repository over ssh connection

link:git-ssh-push.html[git-ssh-push]::
	Helper "server-side" program used by git-ssh-pull

link:git-update-server-info.html[git-update-server-info]::
	Updates auxiliary information on a dumb server to help
	clients discover references and packs on it.

link:git-upload-pack.html[git-upload-pack]::
	Invoked by 'git-clone-pack' and 'git-fetch-pack' to push
	what are asked for.


Porcelain-ish Commands
----------------------

link:git-add-script.html[git-add-script]::
	Add paths to the index file.

link:git-applymbox.html[git-applymbox]::
	Apply patches from a mailbox.

link:git-bisect-script.html[git-bisect-script]::
	Find the change that introduced a bug.

link:git-branch-script.html[git-branch-script]::
	Create and Show branches.

link:git-checkout-script.html[git-checkout-script]::
	Checkout and switch to a branch.

link:git-cherry-pick-script.html[git-cherry-pick-script]::
	Cherry-pick the effect of an existing commit.

link:git-clone-script.html[git-clone-script]::
	Clones a repository into a new directory.

link:git-commit-script.html[git-commit-script]::
	Record changes to the repository.

link:git-fetch-script.html[git-fetch-script]::
	Download from a remote repository via various protocols.

link:git-log-script.html[git-log-script]::
	Shows commit logs.

link:git-ls-remote-script.html[git-ls-remote-script]::
	Shows references in a remote or local repository.

link:git-octopus-script.html[git-octopus-script]::
	Merge more than two commits.

link:git-pull-script.html[git-pull-script]::
	Fetch from and merge with a remote repository.

link:git-push-script.html[git-push-script]::
	Update remote refs along with associated objects.

link:git-rebase-script.html[git-rebase-script]::
	Rebase local commits to new upstream head.

link:git-rename-script.html[git-rename]::
	Rename files and directories.

link:git-repack-script.html[git-repack-script]::
	Pack unpacked objects in a repository.

link:git-reset-script.html[git-reset-script]::
	Reset current HEAD to the specified state.

link:git-resolve-script.html[git-resolve-script]::
	Merge two commits.

link:git-revert-script.html[git-revert-script]::
	Revert an existing commit.

link:git-shortlog.html[git-shortlog]::
	Summarizes 'git log' output.

link:git-show-branch.html[git-show-branch]::
	Show branches and their commits.

link:git-status-script.html[git-status-script]::
	Shows the working tree status.

link:git-verify-tag-script.html[git-verify-tag-script]::
	Check the GPG signature of tag.

link:git-whatchanged.html[git-whatchanged]::
	Shows commit logs and differences they introduce.


Ancillary Commands
------------------
Manipulators:

link:git-applypatch.html[git-applypatch]::
	Apply one patch extracted from an e-mail.

link:git-archimport-script.html[git-archimport-script]::
	Import an arch repository into git.

link:git-convert-cache.html[git-convert-cache]::
	Converts old-style GIT repository

link:git-cvsimport-script.html[git-cvsimport-script]::
	Salvage your data out of another SCM people love to hate.

link:git-merge-one-file-script.html[git-merge-one-file-script]::
	The standard helper program to use with "git-merge-cache"

link:git-prune-script.html[git-prune-script]::
	Prunes all unreachable objects from the object database

link:git-relink-script.html[git-relink-script]::
	Hardlink common objects in local repositories.

link:git-sh-setup-script.html[git-sh-setup-script]::
	Common git shell script setup code.

link:git-tag-script.html[git-tag-script]::
	An example script to create a tag object signed with GPG


Interrogators:

link:git-build-rev-cache.html[git-build-rev-cache]::
	Create or update a rev-cache file.

link:git-cherry.html[git-cherry]::
	Find commits not merged upstream.

link:git-count-objects-script.html[git-count-objects-script]::
	Count unpacked number of objects and their disk consumption.

link:git-daemon.html[git-daemon]::
	A really simple server for GIT repositories.

link:git-diff-helper.html[git-diff-helper]::
	Generates patch format output for git-diff-*

link:git-get-tar-commit-id.html[git-get-tar-commit-id]::
	Extract commit ID from an archive created using git-tar-tree.

link:git-mailinfo.html[git-mailinfo]::
	Extracts patch from a single e-mail message.

link:git-mailsplit.html[git-mailsplit]::
	git-mailsplit.

link:git-patch-id.html[git-patch-id]::
	Compute unique ID for a patch.

link:git-parse-remote-script.html[git-parse-remote-script]::
	Routines to help parsing $GIT_DIR/remotes/

link:git-request-pull-script.html[git-request-pull-script]::
	git-request-pull-script.

link:git-rev-parse.html[git-rev-parse]::
	Pick out and massage parameters.

link:git-send-email-script.html[git-send-email]::
	Send patch e-mails out of "format-patch --mbox" output.

link:git-show-rev-cache.html[git-show-rev-cache]::
	Show the contents of a rev-cache file.

Commands not yet documented
---------------------------

link:git-diff-script.html[git-diff-script]::
	git-diff-script.

link:git-format-patch-script.html[git-format-patch-script]::
	git-format-patch-script.

link:git-stripspace.html[git-stripspace]::
	git-stripspace.

link:gitk.html[gitk]::
	gitk.


Identifier Terminology
----------------------
<object>::
	Indicates the sha1 identifier for any type of object

<blob>::
	Indicates a blob object sha1 identifier

<tree>::
	Indicates a tree object sha1 identifier

<commit>::
	Indicates a commit object sha1 identifier

<tree-ish>::
	Indicates a tree, commit or tag object sha1 identifier.  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>.

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

<file>::
	Indicates a filename - 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 repository (ie the contents of
	`$GIT_DIR/HEAD`)
<tag>::
	a valid tag 'name'+
	(ie the contents of `$GIT_DIR/refs/tags/<tag>`)
<head>::
	a valid head 'name'+
	(ie the contents of `$GIT_DIR/refs/heads/<head>`)
<snap>::
	a valid snapshot 'name'+
	(ie the contents of `$GIT_DIR/refs/snap/<snap>`)


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

Please see link:repository-layout.html[repository layout] document.

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


Terminology
-----------
Please see link:glossary.html[glossary] document.


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
	cache/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 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 `./.git` for the base of the
	repository.

git Commits
~~~~~~~~~~~
'GIT_AUTHOR_NAME'::
'GIT_AUTHOR_EMAIL'::
'GIT_AUTHOR_DATE'::
'GIT_COMMITTER_NAME'::
'GIT_COMMITTER_EMAIL'::
	see link:git-commit-tree.html[git-commit-tree]

git Diffs
~~~~~~~~~
'GIT_DIFF_OPTS'::
'GIT_EXTERNAL_DIFF'::
	see the "generating patches" section in :
	link:git-diff-cache.html[git-diff-cache];
	link:git-diff-files.html[git-diff-files];
	link:git-diff-tree.html[git-diff-tree]

Discussion[[Discussion]]
------------------------
include::../README[]

Author
------
Written by Linus Torvalds <torvalds@osdl.org> and the git-list <git@vger.kernel.org>.

Documentation
--------------
Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.

GIT
---
Part of the link:git.html[git] suite

