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] <blob> <blob>
'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, changes between
two blob objects, 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].

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

	This form is to compare the given two paths on the
	filesystem.  You can omit the `--no-index` option when
	running the command in a working tree controlled by Git and
	at least one of the paths points outside the working tree,
	or when running the command outside a working tree
	controlled by Git.

'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. unborn 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>.

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

'git diff' [options] <blob> <blob>::

	This form is to view the differences between the raw
	contents of two blob objects.

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

-1 --base::
-2 --ours::
-3 --theirs::
	Compare the working tree with the "base" version (stage #1),
	"our branch" (stage #2) or "their branch" (stage #3).  The
	index contains these stages only for unmerged entries i.e.
	while resolving conflicts.  See linkgit:git-read-tree[1]
	section "3-Way Merge" for detailed information.

-0::
	Omit diff output for unmerged entries and just show
	"Unmerged".  Can be used only when comparing the working tree
	with the index.

<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
or 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]

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