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

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.

