gitk(1)
=======

NAME
----
gitk - The git repository browser

SYNOPSIS
--------
'gitk' [<option>...] [<revs>] [--] [<path>...]

DESCRIPTION
-----------
Displays changes in a repository or a selected set of commits. This includes
visualizing the commit graph, showing information related to each commit, and
the files in the trees of each revision.

Historically, gitk was the first repository browser. It's written in tcl/tk
and started off in a separate repository but was later merged into the main
git repository.

OPTIONS
-------
To control which revisions to shown, the command takes options applicable to
the linkgit:git-rev-list[1] command. This manual page describes only the most
frequently used options.

-n <number>, --max-count=<number>::

	Limits the number of commits to show.

--since=<date>::

	Show commits more recent than a specific date.

--until=<date>::

	Show commits older than a specific date.

--all::

	Show all branches.

<revs>::

	Limit the revisions to show. This can be either a single revision
	meaning show from the given revision and back, or it can be a range in
	the form "'<from>'..'<to>'" to show all revisions between '<from>' and
	back to '<to>'. Note, more advanced revision selection can be applied.
	For a more complete list of ways to spell object names, see
	"SPECIFYING REVISIONS" section in linkgit:git-rev-parse[1].

<path>::

	Limit commits to the ones touching files in the given paths. Note, to
	avoid ambiguity wrt. revision names use "--" to separate the paths
	from any preceding options.

Examples
--------
gitk v2.6.12.. include/scsi drivers/scsi::

	Show as the changes since version 'v2.6.12' that changed any
	file in the include/scsi or drivers/scsi subdirectories

gitk --since="2 weeks ago" \-- gitk::

	Show the changes during the last two weeks to the file 'gitk'.
	The "--" is necessary to avoid confusion with the *branch* named
	'gitk'

gitk --max-count=100 --all \-- Makefile::

	Show at most 100 changes made to the file 'Makefile'. Instead of only
	looking for changes in the current branch look in all branches.

See Also
--------
'qgit(1)'::
	A repository browser written in C++ using Qt.

'gitview(1)'::
	A repository browser written in Python using Gtk. It's based on
	'bzrk(1)' and distributed in the contrib area of the git repository.

'tig(1)'::
	A minimal repository browser and git tool output highlighter written
	in C using Ncurses.

Author
------
Written by Paul Mackerras <paulus@samba.org>.

Documentation
--------------
Documentation by Junio C Hamano, Jonas Fonseca, and the git-list
<git@vger.kernel.org>.

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