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 diff 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:<regex>:<file>::

	Trace the evolution of the line range given by "<start>,<end>"
	(or the funcname regex <regex>) 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
-----
Gitk creates the .gitk file in your $HOME directory to store preferences
such as display options, font, and colors.

History
-------
Gitk was the first graphical repository browser. It's written in
tcl/tk and started off in a separate repository but was later merged
into the main Git repository.


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.

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