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
'sticked' 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.)

-L<start>,<end>:<file>::
-L:<funcname>:<file>::

	Trace the evolution of the line range given by "<start>,<end>"
	(or the function name regex <funcname>) within the <file>.  You may
	not give any pathspec limiters.  This is currently limited to
	a walk starting from a single revision, i.e., you may only
	give zero or one positive revision arguments.
	You can specify this option more than once.
+
*Note:* gitk (unlike linkgit:git-log[1]) currently only understands
this option if you specify it "glued together" with its argument.  Do
*not* put a space after `-L`.
+
include::line-range-format.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
