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

dangling object::
	An unreachable object which is not reachable even from other
	unreachable objects; a dangling object has no references to it
	from any reference or object in the repository.

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 repository. 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 remote tracking branches named
	origin/name-of-upstream-branch, which you can see using
	"git branch -r".

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::
	All of the ancestors of a given commit are said to be reachable from
	that commit.  More generally, one object is reachable from another if
	we can reach the one from the other by a chain that follows tags to
	whatever they tag, commits to their parents or trees, and trees to the
	trees or blobs that they contain.

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

shallow repository::
	A shallow repository has an incomplete history some of
	whose commits have parents cauterized away (in other
	words, git is told to pretend that these commits do not
	have the parents, even though they are recorded in the
	commit object).  This is sometimes useful when you are
	interested only in the recent history of a project even
	though the real history recorded in the upstream is
	much larger.  A shallow repository is created by giving
	`--depth` option to gitlink:git-clone[1], and its
	history can be later deepened with gitlink:git-fetch[1].

symref::
	Symbolic reference: instead of containing the SHA1 id itself, it
	is of the format 'ref: refs/some/thing' and when referenced, it
	recursively dereferences to this reference. 'HEAD' is a prime
	example of a symref. Symbolic references are manipulated with
	the gitlink:git-symbolic-ref[1] command.

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.

unreachable object::
	An object which is not reachable from a branch, tag, or any
	other reference.

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.

