gitk(1)
=======

NAME
----
gitk - The Git repository browser

SYNOPSIS
--------
[verse]
'gitk' [<options>] [<revision-range>] [--] [<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.

OPTIONS
-------

To control which revisions to show, gitk supports most options
applicable to the 'git rev-list' command.  It also supports a few
options applicable to the 'git diff-*' commands to control how the
changes each commit introduces are shown.  Finally, it supports some
gitk-specific options.

gitk generally only understands options with arguments in the
'stuck' form (see linkgit:gitcli[7]) due to limitations in the
command-line parser.

rev-list options and arguments
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This manual page describes only the most frequently used options.  See
linkgit:git-rev-list[1] for a complete list.

--all::

	Show all refs (branches, tags, etc.).

--branches[=<pattern>]::
--tags[=<pattern>]::
--remotes[=<pattern>]::

	Pretend as if all the branches (tags, remote branches, resp.)
	are listed on the command line as '<commit>'. If '<pattern>'
	is given, limit refs to ones matching given shell glob. If
	pattern lacks '?', '{asterisk}', or '[', '/{asterisk}' at the
	end is implied.

--since=<date>::

	Show commits more recent than a specific date.

--until=<date>::

	Show commits older than a specific date.

--date-order::

	Sort commits by date when possible.

--merge::

	After an attempt to merge stops with conflicts, show the commits on
	the history between two branches (i.e. the HEAD and the MERGE_HEAD)
	that modify the conflicted files and do not exist on all the heads
	being merged.

--left-right::

	Mark which side of a symmetric difference a commit is reachable
	from.  Commits from the left side are prefixed with a `<`
	symbol and those from the right with a `>` symbol.

--full-history::

	When filtering history with '<path>...', does not prune some
	history.  (See "History simplification" in linkgit:git-log[1]
	for a more detailed explanation.)

--simplify-merges::

	Additional option to `--full-history` to remove some needless
	merges from the resulting history, as there are no selected
	commits contributing to this merge.  (See "History
	simplification" in linkgit:git-log[1] for a more detailed
	explanation.)

--ancestry-path::

	When given a range of commits to display
	(e.g. 'commit1..commit2' or 'commit2 {caret}commit1'), only
	display commits that exist directly on the ancestry chain
	between the 'commit1' and 'commit2', i.e. commits that are
	both descendants of 'commit1', and ancestors of 'commit2'.
	(See "History simplification" in linkgit:git-log[1] for a more
	detailed explanation.)

include::line-range-options.txt[]

<revision range>::

	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
	linkgit:gitrevisions[7].

<path>...::

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

gitk-specific options
~~~~~~~~~~~~~~~~~~~~~

--argscmd=<command>::

	Command to be run each time gitk has to determine the revision
	range to show.  The command is expected to print on its
	standard output a list of additional revisions to be shown,
	one per line.  Use this instead of explicitly specifying a
	'<revision-range>' if the set of commits to show may vary
	between refreshes.

--select-commit=<ref>::

	Select the specified commit after loading the graph.
	Default behavior is equivalent to specifying '--select-commit=HEAD'.

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

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

Files
-----
User configuration and preferences are stored at:

* `$XDG_CONFIG_HOME/git/gitk` if it exists, otherwise
* `$HOME/.gitk` if it exists

If neither of the above exist then `$XDG_CONFIG_HOME/git/gitk` is created and
used by default. If '$XDG_CONFIG_HOME' is not set it defaults to
`$HOME/.config` in all cases.

History
-------
Gitk was the first graphical repository browser. It's written in
tcl/tk.

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

gitk-git/ comes from Paul Mackerras's gitk project:

	git://ozlabs.org/~paulus/gitk

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

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

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