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

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


SYNOPSIS
--------
[verse]
'git diff' [options] [<commit>] [--] [<path>...]
'git diff' [options] --cached [<commit>] [--] [<path>...]
'git diff' [options] <commit> <commit> [--] [<path>...]
'git diff' [options] [--no-index] [--] <path> <path>

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

'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 points outside
the current repository, 'git diff' will 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.
	If HEAD does not exist (e.g. unborned branches) and
	<commit> is not given, it shows all staged changes.
	--staged is a synonym of --cached.

'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
in the last two forms that use ".." notations, can be any
<tree>.  The third form ('git diff <commit> <commit>') can also
be used to compare two <blob> objects.

For a more complete list of ways to spell <commit>, see
"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].
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:gitrevisions[7].

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


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.

SEE ALSO
--------
diff(1),
linkgit:git-difftool[1],
linkgit:git-log[1],
linkgit:gitdiffcore[7],
linkgit:git-format-patch[1],
linkgit:git-apply[1]

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
