GIT-WHATCHANGED(1)GIT-WHATCHANGED(1)NAMEgit-whatchanged - Show logs with difference each commit introduces
SYNOPSIS
git whatchanged <option>...
DESCRIPTION
Shows commit logs and diff output each commit introduces. The command
internally invokes git rev-list piped to git diff-tree, and takes com-
mand line options for both of these commands.
This manual page describes only the most frequently used options.
OPTIONS-p Show textual diffs, instead of the git internal diff output for-
mat that is useful only to tell the changed paths and their
nature of changes.
-<n> Limit output to <n> commits.
<since>..<until>
Limit output to between the two named commits (bottom exclusive,
top inclusive).
-r Show git internal diff output, but for the whole tree, not just
the top level.
-m By default, differences for merge commits are not shown. With
this flag, show differences to that commit from all of its par-
ents.
However, it is not very useful in general, although it is useful
on a file-by-file basis.
--pretty[=<format>], --format=<format>
Pretty-print the contents of the commit logs in a given format,
where <format> can be one of oneline, short, medium, full,
fuller, email, raw and format:<string>. See the "PRETTY FORMATS"
section for some additional details for each format. When omit-
ted, the format defaults to medium.
Note: you can specify the default pretty format in the reposi-
tory configuration (see git-config(1)).
1
GIT-WHATCHANGED(1)GIT-WHATCHANGED(1)--abbrev-commit
Instead of showing the full 40-byte hexadecimal commit object
name, show only a partial prefix. Non default number of digits
can be specified with "--abbrev=<n>" (which also modifies diff
output, if it is displayed).
This should make "--pretty=oneline" a whole lot more readable
for people using 80-column terminals.
--oneline
This is a shorthand for "--pretty=oneline --abbrev-commit" used
together.
--encoding[=<encoding>]
The commit objects record the encoding used for the log message
in their encoding header; this option can be used to tell the
command to re-code the commit log message in the encoding pre-
ferred by the user. For non plumbing commands this defaults to
UTF-8.
--no-notes, --show-notes[=<ref>]
Show the notes (see git-notes(1)) that annotate the commit, when
showing the commit log message. This is the default for git log,
git show and git whatchanged commands when there is no --pretty,
--format nor --oneline option is given on the command line.
With an optional argument, add this ref to the list of notes.
The ref is taken to be in refs/notes/ if it is not qualified.
--[no-]standard-notes
Enable or disable populating the notes ref list from the
core.notesRef and notes.displayRef variables (or corresponding
environment overrides). Enabled by default. See git-config(1).
PRETTY FORMATS
If the commit is a merge, and if the pretty-format is not oneline,
email or raw, an additional line is inserted before the Author: line.
This line begins with "Merge: " and the sha1s of ancestral commits are
printed, separated by spaces. Note that the listed commits may not nec-
essarily be the list of the direct parent commits if you have limited
your view of history: for example, if you are only interested in
changes related to a certain directory or file.
There are several built-in formats, and you can define additional for-
mats by setting a pretty.<name> config option to either another format
name, or a format: string, as described below (see git-config(1)). Here
are the details of the built-in formats:
2
GIT-WHATCHANGED(1)GIT-WHATCHANGED(1)
o oneline
<sha1> <title line>
This is designed to be as compact as possible.
o short
commit <sha1>
Author: <author>
<title line>
o medium
commit <sha1>
Author: <author>
Date: <author date>
<title line>
<full commit message>
o full
commit <sha1>
Author: <author>
Commit: <committer>
<title line>
<full commit message>
o fuller
commit <sha1>
Author: <author>
AuthorDate: <author date>
Commit: <committer>
CommitDate: <committer date>
<title line>
<full commit message>
o email
From <sha1> <date>
From: <author>
Date: <author date>
Subject: [PATCH] <title line>
<full commit message>
3
GIT-WHATCHANGED(1)GIT-WHATCHANGED(1)
o raw
The raw format shows the entire commit exactly as stored in the com-
mit object. Notably, the SHA1s are displayed in full, regardless of
whether --abbrev or --no-abbrev are used, and parents information
show the true parent commits, without taking grafts nor history sim-
plification into account.
o format:<string>
The format:<string> format allows you to specify which information
you want to show. It works a little bit like printf format, with the
notable exception that you get a newline with %n instead of \n.
E.g, format:"The author of %h was %an, %ar%nThe title was >>%s<<%n"
would show something like this:
.ft C
The author of fe6e0ee was Junio C Hamano, 23 hours ago
The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
.ft
The placeholders are:
o %H: commit hash
o %h: abbreviated commit hash
o %T: tree hash
o %t: abbreviated tree hash
o %P: parent hashes
o %p: abbreviated parent hashes
o %an: author name
o %aN: author name (respecting .mailmap, see git-shortlog(1) or
git-blame(1))
o %ae: author email
o %aE: author email (respecting .mailmap, see git-shortlog(1) or
git-blame(1))
o %ad: author date (format respects --date= option)
o %aD: author date, RFC2822 style
4
GIT-WHATCHANGED(1)GIT-WHATCHANGED(1)
o %ar: author date, relative
o %at: author date, UNIX timestamp
o %ai: author date, ISO 8601 format
o %cn: committer name
o %cN: committer name (respecting .mailmap, see git-shortlog(1) or
git-blame(1))
o %ce: committer email
o %cE: committer email (respecting .mailmap, see git-shortlog(1)
or git-blame(1))
o %cd: committer date
o %cD: committer date, RFC2822 style
o %cr: committer date, relative
o %ct: committer date, UNIX timestamp
o %ci: committer date, ISO 8601 format
o %d: ref names, like the --decorate option of git-log(1)
o %e: encoding
o %s: subject
o %f: sanitized subject line, suitable for a filename
o %b: body
o %B: raw body (unwrapped subject and body)
o %N: commit notes
o %gD: reflog selector, e.g., refs/stash@\{1\}
o %gd: shortened reflog selector, e.g., stash@\{1\}
o %gs: reflog subject
o %Cred: switch color to red
o %Cgreen: switch color to green
o %Cblue: switch color to blue
o %Creset: reset color
5
GIT-WHATCHANGED(1)GIT-WHATCHANGED(1)
o %C(...): color specification, as described in color.branch.*
config option
o %m: left, right or boundary mark
o %n: newline
o %%: a raw %
o %x00: print a byte from a hex code
o %w([<w>[,<i1>[,<i2>]]]): switch line wrapping, like the -w
option of git-shortlog(1).
Note
Some placeholders may depend on other options given to the revi-
sion traversal engine. For example, the %g* reflog options will
insert an empty string unless we are traversing reflog entries
(e.g., by git log -g). The %d placeholder will use the "short"
decoration format if --decorate was not already provided on the
command line.
If you add a {plus} (plus sign) after % of a placeholder, a line-feed
is inserted immediately before the expansion if and only if the place-
holder expands to a non-empty string.
If you add a - (minus sign) after % of a placeholder, line-feeds that
immediately precede the expansion are deleted if and only if the place-
holder expands to an empty string.
If you add a ` ` (space) after % of a placeholder, a space is inserted
immediately before the expansion if and only if the placeholder expands
to a non-empty string.
o tformat:
The tformat: format works exactly like format:, except that it pro-
vides "terminator" semantics instead of "separator" semantics. In
other words, each commit has the message terminator character (usu-
ally a newline) appended, rather than a separator placed between
entries. This means that the final entry of a single-line format
will be properly terminated with a new line, just as the "oneline"
6
GIT-WHATCHANGED(1)GIT-WHATCHANGED(1)
format does. For example:
.ft C
$ git log -2 --pretty=format:%h 4da45bef \
| perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
4da45be
7134973 -- NO NEWLINE
$ git log -2 --pretty=tformat:%h 4da45bef \
| perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
4da45be
7134973
.ft
In addition, any unrecognized string that has a % in it is inter-
preted as if it has tformat: in front of it. For example, these two
are equivalent:
.ft C
$ git log -2 --pretty=tformat:%h 4da45bef
$ git log -2 --pretty=%h 4da45bef
.ft
EXAMPLES
git whatchanged -p v2.6.12.. include/scsi drivers/scsi
Show as patches the commits since version v2.6.12 that changed
any file in the include/scsi or drivers/scsi subdirectories
git whatchanged --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
AUTHOR
Written by Linus Torvalds <torvalds@osdl.org: mailto:torvalds@osdl.org>
and Junio C Hamano <gitster@pobox.com: mailto:gitster@pobox.com>
DOCUMENTATION
Documentation by David Greaves, Junio C Hamano and the git-list
<git@vger.kernel.org: mailto:git@vger.kernel.org>.
7
GIT-WHATCHANGED(1)GIT-WHATCHANGED(1)GIT
Part of the git(1) suite
8