问题
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?
回答1:
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
andgit 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 theHEAD
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 linesChanges 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.
回答2:
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
回答3:
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.

Invoke it with
diffuse -m
in your Git working copy.
If you ask me, the best visual differ I've seen for a decade.
来源:https://stackoverflow.com/questions/13057457/show-both-staged-working-tree-in-git-diff