GIT Glossary
============

[[def_alternate_object_database]]alternate object database::
	Via the alternates mechanism, a <<def_repository,repository>>
	can inherit part of its <<def_object_database,object database>>
	from another object database, which is called "alternate".

[[def_bare_repository]]bare repository::
	A bare repository is normally an appropriately
	named <<def_directory,directory>> with a `.git` suffix that does not
	have a locally checked-out copy of any of the files under
	<<def_revision,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.

[[def_blob_object]]blob object::
	Untyped <<def_object,object>>, e.g. the contents of a file.

[[def_branch]]branch::
	A "branch" is an active line of development.  The most recent
	<<def_commit,commit>> on a branch is referred to as the tip of
	that branch.  The tip of the branch is referenced by a branch
	<<def_head,head>>, which moves forward as additional development
	is done on the branch.  A single git
	<<def_repository,repository>> can track an arbitrary number of
	branches, but your <<def_working_tree,working tree>> is
	associated with just one of them (the "current" or "checked out"
	branch), and <<def_HEAD,HEAD>> points to that branch.

[[def_cache]]cache::
	Obsolete for: <<def_index,index>>.

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

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

[[def_checkout]]checkout::
	The action of updating the <<def_working_tree,working tree>> to a
	<<def_revision,revision>> which was stored in the
	<<def_object_database,object database>>.

[[def_cherry-picking]]cherry-picking::
	In <<def_SCM,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 <<def_commit,commit>> and to record it based on the tip
	of the current <<def_branch,branch>> as a new commit.

[[def_clean]]clean::
	A <<def_working_tree,working tree>> is clean, if it
	corresponds to the <<def_revision,revision>> referenced by the current
	<<def_head,head>>. Also see "<<def_dirty,dirty>>".

[[def_commit]]commit::
	As a noun: A single point in the
	git history; the entire history of a project is represented as a
	set of interrelated commits.  The word "commit" is often
	used by git in the same places other revision control systems
	use the words "revision" or "version".  Also used as a short
	hand for <<def_commit_object,commit object>>.
+
As a verb: The action of storing a new snapshot of the project's
state in the git history, by creating a new commit representing the current
state of the <<def_index,index>> and advancing <<def_HEAD,HEAD>>
to point at the new commit.

[[def_commit_object]]commit object::
	An <<def_object,object>> which contains the information about a
	particular <<def_revision,revision>>, such as parents, committer,
	author, date and the <<def_tree_object,tree object>> which corresponds
	to the top <<def_directory,directory>> of the stored
	<<def_revision,revision>>.

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

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

[[def_dangling_object]]dangling object::
	An <<def_unreachable_object,unreachable object>> which is not
	<<def_reachable,reachable>> even from other unreachable objects; a
	dangling object has no references to it from any
	reference or <<def_object,object>> in the <<def_repository,repository>>.

[[def_detached_HEAD]]detached HEAD::
	Normally the <<def_HEAD,HEAD>> stores the name of a
	<<def_branch,branch>>.  However, git also allows you to check
	out an arbitrary commit that isn't necessarily the tip of any
	particular branch.  In this case HEAD is said to be "detached".

[[def_dircache]]dircache::
	You are *waaaaay* behind.

[[def_directory]]directory::
	The list you get with "ls" :-)

[[def_dirty]]dirty::
	A <<def_working_tree,working tree>> is said to be "dirty" if
	it contains modifications which have not been committed to the current
	<<def_branch,branch>>.

[[def_ent]]ent::
	Favorite synonym to "<<def_tree-ish,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.

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

[[def_fetch]]fetch::
	Fetching a <<def_branch,branch>> means to get the
	branch's <<def_head_ref,head ref>> from a remote
	<<def_repository,repository>>, to find out which objects are
	missing from the local <<def_object_database,object database>>,
	and to get them, too.  See also gitlink:git-fetch[1].

[[def_file_system]]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.

[[def_git_archive]]git archive::
	Synonym for <<def_repository,repository>> (for arch people).

[[def_grafts]]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 <<def_commit,commit>> has
	is different from what was recorded when the commit was
	created. Configured via the `.git/info/grafts` file.

[[def_hash]]hash::
	In git's context, synonym to <<def_object_name,object name>>.

[[def_head]]head::
	A named reference to the <<def_commit,commit>> at the tip of a
	<<def_branch,branch>>.  Heads are stored in
	`$GIT_DIR/refs/heads/`, except when using packed refs. (See
	gitlink:git-pack-refs[1].)

[[def_HEAD]]HEAD::
	The current branch.  In more detail: Your <<def_working_tree,
	working tree>> is normally derived from the state of the tree
	referred to by HEAD.  HEAD is a reference to one of the
	<<def_head,heads>> in your repository, except when using a
	<<def_detached_HEAD,detached HEAD>>, in which case it may
	reference an arbitrary commit.

[[def_head_ref]]head ref::
	A synonym for <<def_head,head>>.

[[def_hook]]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/` <<def_directory,directory>>, and are enabled by simply
	making them executable.

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

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

[[def_master]]master::
	The default development <<def_branch,branch>>. Whenever you
	create a git <<def_repository,repository>>, a branch named
	"master" is created, and becomes the active branch. In most
	cases, this contains the local development, though that is
	purely by convention and is not required.

[[def_merge]]merge::
	As a verb: To bring the contents of another
	<<def_branch,branch>> (possibly from an external
	<<def_repository,repository>>) into the current branch.  In the
	case where the merged-in branch is from a different repository,
	this is done by first <<def_fetch,fetching>> the remote branch
	and then merging the result into the current branch.  This
	combination of fetch and merge operations is called a
	<<def_pull,pull>>.  Merging is performed by an automatic process
	that identifies changes made since the branches diverged, and
	then applies all those changes together.  In cases where changes
	conflict, manual intervention may be required to complete the
	merge.
+
As a noun: unless it is a <<def_fast_forward,fast forward>>, a
successful merge results in the creation of a new <<def_commit,commit>>
representing the result of the merge, and having as
<<def_parent,parents>> the tips of the merged <<def_branch,branches>>.
This commit is referred to as a "merge commit", or sometimes just a
"merge".

[[def_object]]object::
	The unit of storage in git. It is uniquely identified by the
	<<def_SHA1,SHA1>> of its contents. Consequently, an
	object can not be changed.

[[def_object_database]]object database::
	Stores a set of "objects", and an individual <<def_object,object>> is
	identified by its <<def_object_name,object name>>. The objects usually
	live in `$GIT_DIR/objects/`.

[[def_object_identifier]]object identifier::
	Synonym for <<def_object_name,object name>>.

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

[[def_object_type]]object type::
	One of the identifiers
	"<<def_commit,commit>>","<<def_tree,tree>>","<<def_tag,tag>>" or "<<def_blob_object,blob>>"
	describing the type of an <<def_object,object>>.

[[def_octopus]]octopus::
	To <<def_merge,merge>> more than two branches. Also denotes an
	intelligent predator.

[[def_origin]]origin::
	The default upstream <<def_repository,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 <<def_branch,branch>> -r".

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

[[def_pack_index]]pack index::
	The list of identifiers, and other information, of the objects in a
	<<def_pack,pack>>, to assist in efficiently accessing the contents of a
	pack.

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

[[def_pickaxe]]pickaxe::
	The term <<def_pickaxe,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
	<<def_changeset,changeset>> that introduced or removed, say, a
	particular line of text. See gitlink:git-diff[1].

[[def_plumbing]]plumbing::
	Cute name for <<def_core_git,core git>>.

[[def_porcelain]]porcelain::
	Cute name for programs and program suites depending on
	<<def_core_git,core git>>, presenting a high level access to
	core git. Porcelains expose more of a <<def_SCM,SCM>>
	interface than the <<def_plumbing,plumbing>>.

[[def_pull]]pull::
	Pulling a <<def_branch,branch>> means to <<def_fetch,fetch>> it and
	<<def_merge,merge>> it.  See also gitlink:git-pull[1].

[[def_push]]push::
	Pushing a <<def_branch,branch>> means to get the branch's
	<<def_head_ref,head ref>> from a remote <<def_repository,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 <<def_reachable,reachable>> from the local
	head ref, and which are missing from the remote
	repository, into the remote
	<<def_object_database,object database>>, and updating the remote
	head ref. If the remote <<def_head,head>> is not an
	ancestor to the local head, the push fails.

[[def_reachable]]reachable::
	All of the ancestors of a given <<def_commit,commit>> are said to be
	"reachable" from that commit. More
	generally, one <<def_object,object>> is reachable from
	another if we can reach the one from the other by a <<def_chain,chain>>
	that follows <<def_tag,tags>> to whatever they tag,
	<<def_commit_object,commits>> to their parents or trees, and
	<<def_tree_object,trees>> to the trees or <<def_blob_object,blobs>>
	that they contain.

[[def_rebase]]rebase::
	To reapply a series of changes from a <<def_branch,branch>> to a
	different base, and reset the <<def_head,head>> of that branch
	to the result.

[[def_ref]]ref::
	A 40-byte hex representation of a <<def_SHA1,SHA1>> or a name that
	denotes a particular <<def_object,object>>. These may be stored in
	`$GIT_DIR/refs/`.

[[def_refspec]]refspec::
	A <<def_refspec,refspec>> is used by <<def_fetch,fetch>> and
	<<def_push,push>> to describe the mapping between remote
	<<def_ref,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
	<<def_branch,branch>> <<def_head,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]

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

[[def_resolve]]resolve::
	The action of fixing up manually what a failed automatic
	<<def_merge,merge>> left behind.

[[def_revision]]revision::
	A particular state of files and directories which was stored in the
	<<def_object_database,object database>>. It is referenced by a
	<<def_commit_object,commit object>>.

[[def_rewind]]rewind::
	To throw away part of the development, i.e. to assign the
	<<def_head,head>> to an earlier <<def_revision,revision>>.

[[def_SCM]]SCM::
	Source code management (tool).

[[def_SHA1]]SHA1::
	Synonym for <<def_object_name,object name>>.

[[def_shallow_repository]]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 <<def_commit_object,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 the `--depth` option to gitlink:git-clone[1], and
	its history can be later deepened with gitlink:git-fetch[1].

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

[[def_tag]]tag::
	A <<def_ref,ref>> pointing to a tag or
	<<def_commit_object,commit object>>. In contrast to a <<def_head,head>>,
	a tag is not changed by a <<def_commit,commit>>. Tags (not
	<<def_tag_object,tag objects>>) are stored in `$GIT_DIR/refs/tags/`. A
	git tag has nothing to do with a Lisp tag (which would be
	called an <<def_object_type,object type>> in git's context). A
	tag is most typically used to mark a particular point in the
	commit ancestry <<def_chain,chain>>.

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

[[def_topic_branch]]topic branch::
	A regular git <<def_branch,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.

[[def_tracking_branch]]tracking branch::
	A regular git <<def_branch,branch>> that is used to follow changes from
	another <<def_repository,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 <<def_ref,ref>> in a Pull:
	<<def_refspec,refspec>>.

[[def_tree]]tree::
	Either a <<def_working_tree,working tree>>, or a <<def_tree_object,tree
	object>> together with the dependent blob and tree objects
	(i.e. a stored representation of a working tree).

[[def_tree_object]]tree object::
	An <<def_object,object>> containing a list of file names and modes along
	with refs to the associated blob and/or tree objects. A
	<<def_tree,tree>> is equivalent to a <<def_directory,directory>>.

[[def_tree-ish]]tree-ish::
	A <<def_ref,ref>> pointing to either a <<def_commit_object,commit
	object>>, a <<def_tree_object,tree object>>, or a <<def_tag_object,tag
	object>> pointing to a tag or commit or tree object.

[[def_unmerged_index]]unmerged index::
	An <<def_index,index>> which contains unmerged
	<<def_index_entry,index entries>>.

[[def_unreachable_object]]unreachable object::
	An <<def_object,object>> which is not <<def_reachable,reachable>> from a
	<<def_branch,branch>>, <<def_tag,tag>>, or any other reference.

[[def_working_tree]]working tree::
	The tree of actual checked out files.  The working tree is
	normally equal to the <<def_HEAD,HEAD>> plus any local changes
	that you have made but not yet committed.
