64

If I run git diff I see the changes in my working tree, and if I run git diff --staged (alternatively --cached) then I see the changes that are staged (w/ git add) but is there a way with git diff to see all in one go?

krlmlr
  • 25,056
  • 14
  • 120
  • 217
swrobel
  • 4,053
  • 2
  • 33
  • 42
  • 7
    Amazing graphic explaining the different types of `git diff`s here! http://stackoverflow.com/questions/1587846/how-do-i-show-the-changes-which-have-been-staged/1587952#1587952 – swrobel Oct 24 '12 at 23:10
  • `git status -v -v` will soon shows just that (git 2.3.4+, Q2 2015). See [my answer below](http://stackoverflow.com/a/29116346/6309). – VonC Mar 18 '15 at 07:30

3 Answers3

90

If you mean the changes between the working tree and your HEAD commit (i.e. both staged and unstaged changes together) this is just done with:

git diff HEAD
CB Bailey
  • 755,051
  • 104
  • 632
  • 656
35

Is there a way with git diff to see all in one go?

There is, with Git 2.4.0+ (April 2015).

See commit 4055500 from Michael J Gruber mjg:

commit/status: show the index-worktree diff with -v -v (or -vv)

git commit and git status in long format show the diff between HEAD and the index when given -v. This allows previewing a commit to be made.

They also list tracked files with unstaged changes, but without a diff.

Introduce '-v -v' (or -vv) which shows the diff between the index and the worktree in addition to the HEAD index diff. This allows a review of unstaged changes which might be missing from the commit.

In the case of '-v -v' (or -vv), additional header lines

Changes to be committed:

and

Changes not staged for commit:

are inserted before the diffs, which are equal to those in the status part; the latter preceded by 50*- to make it stick out more.

In the OP's case, a simple git status -v -v (or git status -vv) will show both staged and unstaged diffs.

Rory O'Kane
  • 29,210
  • 11
  • 96
  • 131
VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250
4

The diffuse visual diff tool can do that: It will show three panes if some but not all changes are staged. In the case of conflicts, there will even be four panes.

Screenshot of diffuse with staged and unstaged edits

Invoke it with

diffuse -m

in your Git working copy.

If you ask me, the best visual differ I've seen for a decade.

krlmlr
  • 25,056
  • 14
  • 120
  • 217
  • 3
    Great tip and much appreciated, but not exactly an answer since I asked for the git command to do this. Marking the other one as the answer... – swrobel Oct 24 '12 at 23:10