git-diff(1)
===========

NAME
----
git-diff - Show changes between commits, commit and working tree, etc


SYNOPSIS
--------
'git diff' [<common diff options>] <commit>{0,2} [--] [<path>...]

DESCRIPTION
-----------
Show changes between two trees, a tree and the working tree, a
tree and the index file, or the index file and the working tree.

'git diff' [--options] [--] [<path>...]::

	This form is to view the changes you made relative to
	the index (staging area for the next commit).  In other
	words, the differences are what you _could_ tell git to
	further add to the index but you still haven't.  You can
	stage these changes by using linkgit:git-add[1].
+
If exactly two paths are given, and at least one is untracked,
compare the two files / directories. This behavior can be
forced by --no-index.

'git diff' [--options] --cached [<commit>] [--] [<path>...]::

	This form is to view the changes you staged for the next
	commit relative to the named <commit>.  Typically you
	would want comparison with the latest commit, so if you
	do not give <commit>, it defaults to HEAD.

'git diff' [--options] <commit> [--] [<path>...]::

	This form is to view the changes you have in your
	working tree relative to the named <commit>.  You can
	use HEAD to compare it with the latest commit, or a
	branch name to compare with the tip of a different
	branch.

'git diff' [--options] <commit> <commit> [--] [<path>...]::

	This is to view the changes between two arbitrary
	<commit>.

'git diff' [--options] <commit>..<commit> [--] [<path>...]::

	This is synonymous to the previous form.  If <commit> on
	one side is omitted, it will have the same effect as
	using HEAD instead.

'git diff' [--options] <commit>\...<commit> [--] [<path>...]::

	This form is to view the changes on the branch containing
	and up to the second <commit>, starting at a common ancestor
	of both <commit>.  "git diff A\...B" is equivalent to
	"git diff $(git-merge-base A B) B".  You can omit any one
	of <commit>, which has the same effect as using HEAD instead.

Just in case if you are doing something exotic, it should be
noted that all of the <commit> in the above description, except
for the last two forms that use ".." notations, can be any
<tree-ish>.

For a more complete list of ways to spell <commit>, see
"SPECIFYING REVISIONS" section in linkgit:git-rev-parse[1].
However, "diff" is about comparing two _endpoints_, not ranges,
and the range notations ("<commit>..<commit>" and
"<commit>\...<commit>") do not mean a range as defined in the
"SPECIFYING RANGES" section in linkgit:git-rev-parse[1].

OPTIONS
-------
:git-diff: 1
include::diff-options.txt[]

<path>...::
	The <paths> parameters, when given, are used to limit
	the diff to the named paths (you can give directory
	names and get diff for all files under them).

Output format
-------------
include::diff-format.txt[]

EXAMPLES
--------

Various ways to check your working tree::
+
------------
$ git diff            <1>
$ git diff --cached   <2>
$ git diff HEAD       <3>
------------
+
<1> Changes in the working tree not yet staged for the next commit.
<2> Changes between the index and your last commit; what you
would be committing if you run "git commit" without "-a" option.
<3> Changes in the working tree since your last commit; what you
would be committing if you run "git commit -a"

Comparing with arbitrary commits::
+
------------
$ git diff test            <1>
$ git diff HEAD -- ./test  <2>
$ git diff HEAD^ HEAD      <3>
------------
+
<1> Instead of using the tip of the current branch, compare with the
tip of "test" branch.
<2> Instead of comparing with the tip of "test" branch, compare with
the tip of the current branch, but limit the comparison to the
file "test".
<3> Compare the version before the last commit and the last commit.

Comparing branches::
+
------------
$ git diff topic master    <1>
$ git diff topic..master   <2>
$ git diff topic...master  <3>
------------
+
<1> Changes between the tips of the topic and the master branches.
<2> Same as above.
<3> Changes that occurred on the master branch since when the topic
branch was started off it.

Limiting the diff output::
+
------------
$ git diff --diff-filter=MRC            <1>
$ git diff --name-status                <2>
$ git diff arch/i386 include/asm-i386   <3>
------------
+
<1> Show only modification, rename and copy, but not addition
nor deletion.
<2> Show only names and the nature of change, but not actual
diff output.
<3> Limit diff output to named subtrees.

Munging the diff output::
+
------------
$ git diff --find-copies-harder -B -C  <1>
$ git diff -R                          <2>
------------
+
<1> Spend extra cycles to find renames, copies and complete
rewrites (very expensive).
<2> Output diff in reverse.


Author
------
Written by Linus Torvalds <torvalds@osdl.org>

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

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