object::
	The unit of storage in GIT. It is uniquely identified by
	the SHA1 of its contents. Consequently, an object can not
	be changed.

object name::
	The unique identifier of an object. The hash of the object's contents
	using the Secure Hash Algorithm 1 and usually represented by the 40
	character hexadecimal encoding of the hash of the object (possibly
	followed by a white space).

SHA1::
	Synonym for object name.

object identifier::
	Synonym for object name.

hash::
	In git's context, synonym to object name.

object database::
	Stores a set of "objects", and an individial object is identified
	by its object name. The object usually live in $GIT_DIR/objects/.

blob object::
	Untyped object, e.g. the contents of a file.

tree object::
	An object containing a list of file names and modes along with refs
	to the associated blob and/or tree objects. A tree is equivalent
	to a directory.

tree::
	Either a working tree, or a tree object together with the
	dependent blob and tree objects (i.e. a stored representation
	of a working tree).

DAG::
	Directed acyclic graph. The commit objects form a directed acyclic
	graph, because they have parents (directed), and the graph of commit
	objects is acyclic (there is no chain which begins and ends with the
	same object).

index::
	A collection of files with stat information, whose contents are
	stored as objects. The cache is a stored version of your working
	tree. Truth be told, it can also contain a second, and even a third
	version of a working tree, which are used when merging.

index entry::
	The information regarding a particular file, stored in the index.
	An index entry can be unmerged, if a merge was started, but not
	yet finished (i.e. if the cache contains multiple versions of
	that file).

unmerged index:
	An index which contains unmerged index entries.

cache::
	Obsolete for: index.

working tree::
	The set of files and directories currently being worked on,
	i.e. you can work in your working tree without using git at all.

directory::
	The list you get with "ls" :-)

revision::
	A particular state of files and directories which was stored in
	the object database. It is referenced by a commit object.

checkout::
	The action of updating the working tree to a revision which was
	stored in the object database.

commit::
	As a verb: The action of storing the current state of the cache in the
	object database. The result is a revision.
	As a noun: Short hand for commit object.

commit object::
	An object which contains the information about a particular
	revision, such as parents, committer, author, date and the
	tree object which corresponds to the top directory of the
	stored revision.

parent::
	A commit object contains a (possibly empty) list of the logical
	predecessor(s) in the line of development, i.e. its parents.

changeset::
	BitKeeper/cvsps speak for "commit". Since git does not store
	changes, but states, it really does not make sense to use
	the term "changesets" with git.

clean::
	A working tree is clean, if it corresponds to the revision
	referenced by the current head.

dirty::
	A working tree is said to be dirty if it contains modifications
	which have not been committed to the current branch.

head::
	The top of a branch. It contains a ref to the corresponding
	commit object.

branch::
	A non-cyclical graph of revisions, i.e. the complete history of
	a particular revision, which is called the branch head. The
	branch heads are stored in $GIT_DIR/refs/heads/.

ref::
	A 40-byte hex representation of a SHA1 pointing to a particular
	object. These may be stored in $GIT_DIR/refs/.

head ref::
	A ref pointing to a head. Often, this is abbreviated to "head".
	Head refs are stored in $GIT_DIR/refs/heads/.

tree-ish::
	A ref pointing to either a commit object, a tree object, or a
	tag object pointing to a tag or commit or tree object.

ent::
	Favorite synonym to "tree-ish" by some total geeks. See
	http://en.wikipedia.org/wiki/Ent_(Middle-earth) for an in-depth
	explanation.

tag object::
	An object containing a ref pointing to another object, which can
	contain a message just like a commit object. It can also
	contain a (PGP) signature, in which case it is called a "signed
	tag object".

tag::
	A ref pointing to a tag or commit object. In contrast to a head,
	a tag is not changed by a commit. Tags (not tag objects) are
	stored in $GIT_DIR/refs/tags/. A git tag has nothing to do with
	a Lisp tag (which is called object type in git's context).
	A tag is most typically used to mark a particular point in the
	commit ancestry chain.

merge::
	To merge branches means to try to accumulate the changes since a
	common ancestor and apply them to the first branch. An automatic
	merge uses heuristics to accomplish that. Evidently, an automatic
	merge can fail.

octopus::
	To merge more than two branches. Also denotes an intelligent
	predator.

resolve::
	The action of fixing up manually what a failed automatic merge
	left behind.

rewind::
	To throw away part of the development, i.e. to assign the head to
	an earlier revision.

rebase::
	To clean a branch by starting from the head of the main line of
	development ("master"), and reapply the (possibly cherry-picked)
	changes from that branch.

repository::
	A collection of refs together with an object database containing
	all objects, which are reachable from the refs, possibly accompanied
	by meta data from one or more porcelains. A repository can
	share an object database with other repositories.

git archive::
	Synonym for repository (for arch people).

file system::
	Linus Torvalds originally designed git to be a user space file
	system, i.e. the infrastructure to hold files and directories.
	That ensured the efficiency and speed of git.

alternate object database::
	Via the alternates mechanism, a repository can inherit part of its
	object database from another object database, which is called
	"alternate".

reachable::
	An object is reachable from a ref/commit/tree/tag, if there is a
	chain leading from the latter to the former.

chain::
	A list of objects, where each object in the list contains a
	reference to its successor (for example, the successor of a commit
	could be one of its parents).

fetch::
	Fetching a branch means to get the branch's head ref from a
	remote repository, to find out which objects are missing from
	the local object database, and to get them, too.

pull::
	Pulling a branch means to fetch it and merge it.

push::
	Pushing a branch means to get the branch's head ref from a remote
	repository, find out if it is an ancestor to the branch's local
	head ref is a direct, and in that case, putting all objects, which
	are reachable from the local head ref, and which are missing from
	the remote repository, into the remote object database, and updating
	the remote head ref. If the remote head is not an ancestor to the
	local head, the push fails.

pack::
	A set of objects which have been compressed into one file (to save
	space or to transmit them efficiently).

pack index::
	The list of identifiers, and other information, of the objects in a
	pack, to assist in efficiently accessing the contents of a pack. 

core git::
	Fundamental data structures and utilities of git. Exposes only
	limited source code management tools.

plumbing::
	Cute name for core git.

porcelain::
	Cute name for programs and program suites depending on core git,
	presenting a high level access to core git. Porcelains expose
	more of a SCM interface than the plumbing.

object type:
	One of the identifiers "commit","tree","tag" and "blob" describing
	the type of an object.

SCM::
	Source code management (tool).

dircache::
	You are *waaaaay* behind.

