git-gui(1)
==========

NAME
----
git-gui - A portable graphical interface to Git

SYNOPSIS
--------
'git gui' [<command>] [arguments]

DESCRIPTION
-----------
A Tcl/Tk based graphical user interface to Git.  'git-gui' focuses
on allowing users to make changes to their repository by making
new commits, amending existing ones, creating branches, performing
local merges, and fetching/pushing to remote repositories.

Unlike 'gitk', 'git-gui' focuses on commit generation
and single file annotation and does not show project history.
It does however supply menu actions to start a 'gitk' session from
within 'git-gui'.

'git-gui' is known to work on all popular UNIX systems, Mac OS X,
and Windows (under both Cygwin and MSYS).  To the extent possible
OS specific user interface guidelines are followed, making 'git-gui'
a fairly native interface for users.

COMMANDS
--------
blame::
	Start a blame viewer on the specified file on the given
	version (or working directory if not specified).

browser::
	Start a tree browser showing all files in the specified
	commit (or 'HEAD' by default).  Files selected through the
	browser are opened in the blame viewer.

citool::
	Start 'git-gui' and arrange to make exactly one commit before
	exiting and returning to the shell.  The interface is limited
	to only commit actions, slightly reducing the application's
	startup time and simplifying the menubar.

version::
	Display the currently running version of 'git-gui'.


Examples
--------
git gui blame Makefile::

	Show the contents of the file 'Makefile' in the current
	working directory, and provide annotations for both the
	original author of each line, and who moved the line to its
	current location.  The uncommitted file is annotated, and
	uncommitted changes (if any) are explicitly attributed to
	'Not Yet Committed'.

git gui blame v0.99.8 Makefile::

	Show the contents of 'Makefile' in revision 'v0.99.8'
	and provide annotations for each line.  Unlike the above
	example the file is read from the object database and not
	the working directory.

git gui citool::

	Make one commit and return to the shell when it is complete.

git citool::

	Same as `git gui citool` (above).

git gui browser maint::

	Show a browser for the tree of the 'maint' branch.  Files
	selected in the browser can be viewed with the internal
	blame viewer.

SEE ALSO
--------
linkgit:gitk[1]::
	The git repository browser.  Shows branches, commit history
	and file differences.  gitk is the utility started by
	'git-gui''s Repository Visualize actions.

Other
-----
'git-gui' is actually maintained as an independent project, but stable
versions are distributed as part of the Git suite for the convenience
of end users.

A 'git-gui' development repository can be obtained from:

  git clone git://repo.or.cz/git-gui.git

or

  git clone http://repo.or.cz/r/git-gui.git

or browsed online at http://repo.or.cz/w/git-gui.git/[].

Author
------
Written by Shawn O. Pearce <spearce@spearce.org>.

Documentation
--------------
Documentation by Shawn O. Pearce <spearce@spearce.org>.

GIT
---
Part of the linkgit:git[1] suite
