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

bare repository::
	A bare repository is normally an appropriately named
	directory with a `.git` suffix that does not have a
	locally checked-out copy of any of the files under revision
	control.  That is, all of the `git` administrative and
	control files that would normally be present in the
	hidden `.git` sub-directory are directly present in
	the `repository.git` directory instead, and no other files
	are present and checked out.  Usually publishers of public
	repositories make bare repositories available.

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

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

cache::
	Obsolete for: index.

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).

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.

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

cherry-picking::
	In SCM jargon, "cherry pick" means to choose a subset of
	changes out of a series of changes (typically commits)
	and record them as a new series of changes on top of
	different codebase.  In GIT, this is performed by
	"git cherry-pick" command to extract the change
	introduced by an existing commit and to record it based
	on the tip of the current branch as a new commit.

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

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.

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

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).

dircache::
	You are *waaaaay* behind.

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

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

ent::
	Favorite synonym to "tree-ish" by some total geeks. See
	`http://en.wikipedia.org/wiki/Ent_(Middle-earth)` for an in-depth
	explanation.  Avoid this term, not to confuse people.

fast forward::
	A fast-forward is a special type of merge where you have
	a revision and you are "merging" another branch's changes
	that happen to be a descendant of what you have.
	In such these cases, you do not make a new merge commit but
	instead just update to his revision. This will happen
	frequently on a tracking branch of a remote repository.

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.

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.

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

grafts::
	Grafts enables two otherwise different lines of development to be
	joined together by recording fake ancestry information for commits.
	This way you can make git pretend the set of parents a commit
	has is different from what was recorded when the commit was created.
	Configured via the `.git/info/grafts` file.

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

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

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

hook::
	During the normal execution of several git commands,
	call-outs are made to optional scripts that allow
	a developer to add functionality or checking.
	Typically, the hooks allow for a command to be pre-verified
	and potentially aborted, and allow for a post-notification
	after the operation is done.
	The hook scripts are found in the `$GIT_DIR/hooks/` directory,
	and are enabled by simply making them executable.

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).

master::
	The default development branch. Whenever you create a git
	repository, a branch named "master" is created, and becomes
	the active branch. In most cases, this contains the local
	development, though that is purely conventional and not required.

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.

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 database::
	Stores a set of "objects", and an individual object is identified
	by its object name. The objects usually live in `$GIT_DIR/objects/`.

object identifier::
	Synonym for object name.

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).

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

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

origin::
	The default upstream tracking branch. Most projects have at
	least one upstream project which they track. By default
	'origin' is used for that purpose.  New upstream updates
	will be fetched into this branch; you should never commit
	to it yourself.

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.

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

pickaxe::
	The term pickaxe refers to an option to the diffcore routines
	that help select changes that add or delete a given text string.
	With the --pickaxe-all option, it can be used to view the
	full changeset that introduced or removed, say, a particular
	line of text.  See gitlink:git-diff[1].

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.

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.

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

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.

ref::
	A 40-byte hex representation of a SHA1 or a name that denotes
	a particular object. These may be stored in `$GIT_DIR/refs/`.

refspec::
	A refspec is used by fetch and push to describe the mapping
	between remote ref and local ref.  They are combined with
	a colon in the format <src>:<dst>, preceded by an optional
	plus sign, +.  For example:
	`git fetch $URL refs/heads/master:refs/heads/origin`
	means "grab the master branch head from the $URL and store
	it as my origin branch head".
	And `git push $URL refs/heads/master:refs/heads/to-upstream`
	means "publish my master branch head as to-upstream master head
	at $URL".   See also gitlink:git-push[1]

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.

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

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

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

SCM::
	Source code management (tool).

SHA1::
	Synonym for object name.

topic branch::
	A regular git branch that is used by a developer to
	identify a conceptual line of development.  Since branches
	are very easy and inexpensive, it is often desirable to
	have several small branches that each contain very well
	defined concepts or small incremental yet related changes.

tracking branch::
	A regular git branch that is used to follow changes from
	another repository.  A tracking branch should not contain
	direct modifications or have local commits made to it.
	A tracking branch can usually be identified as the
	right-hand-side ref in a Pull: refspec.

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).

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.

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.

unmerged index:
	An index which contains unmerged index entries.

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.

