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 objects 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 index 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 index 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 index 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.

