130

With git pull, it shows a diff summary like this:

Updating 6a78751..811f788 Fast-forward app/Http/Controllers/SaleController.php | 7 +- .../views/pages/sale/create.blade.php | 137 +++++++++++++--- resources/views/pages/sale/index.blade.php | 4 +- resources/views/pages/sale/show.blade.php | 5 +- 4 files changed, 123 insertions(+), 30 deletions(-) 

Is there a way to use commands like git diff to get similar output?

1
  • 1
    Between what and what? Workspace and index? Index and HEAD? Two commits? Commented Jun 2, 2016 at 3:44

5 Answers 5

170

git log --stat will show the amount each file was changed.

git whatchanged gives some detail into the files that were modified.

git diff --stat <sha1> <sha2> gives the files and the amount of changes between two commits.

git diff --stat <branch> to compare to another branch (e.g. master)

Sign up to request clarification or add additional context in comments.

Comments

117

git diff is indeed the command you seek. In particular you want

git diff --stat 

Other similar reports are available using

git diff --numstat git diff --shortstat git diff --dirstat git diff --name-status 

Comments

17

Is there a way to use commands like git diff to get similar output?

With Git 2.17 (Q2 2018), there actually is, with a result a bit more complete than git diff -stat:

"git diff" and friends learned "--compact-summary" that shows the information usually given with the "--summary" option on the same line as the diffstat output of the "--stat" option (which saves vertical space and keeps info on a single path at the same place).

See commit ddf88fa (24 Feb 2018), and commit c905cbc (01 Feb 2018) by Nguyễn Thái Ngọc Duy (pclouds).
(Merged by Junio C Hamano -- gitster -- in commit 868f7d2, 14 Mar 2018)

diff: add --compact-summary

Certain information is currently shown with --summary, but when used in combination with --stat it's a bit hard to read since info of the same file is in two places (--stat and --summary).

On top of that, commits that add or remove files double the number of display lines, which could be a lot if you add or remove a lot of files.

--compact-summary embeds most of --summary back in --stat in the little space between the file name part and the graph line, e.g. with commit 0433d53:

Documentation/merge-config.txt | 4 + builtin/merge.c | 2 + ...-pull-verify-signatures.sh (new +x) | 81 ++++++++++++++ t/t7612-merge-verify-signatures.sh | 45 ++++++++ 4 files changed, 132 insertions(+) 

It helps both condensing information and saving some text space.

What's new in diffstat is:

  • A new 0644 file is shown as (new)
  • A new 0755 file is shown as (new +x)
  • A new symlink is shown as (new +l)
  • A deleted file is shown as (gone)
  • A mode change adding executable bit is shown as (mode +x)
  • A mode change removing it is shown as (mode -x)

Note that --compact-summary does not contain all the information --summary provides. Rewrite percentage is not shown but it could be added later, like R50% or C20%.


The summary will be even more concise with Git 2.29 (Q4 2020), since "git diff --stat -w(man) showed 0-line changes for paths whose changes were only whitespaces, which was not intuitive.

Such paths are now omitted from the stat output.

See commit 1cf3d5d (20 Aug 2020) by Matthew Rogers (ROGERSM94).
(Merged by Junio C Hamano -- gitster -- in commit b58e47a, 03 Sep 2020)

diff: teach --stat to ignore uninteresting modifications

Signed-off-by: Matthew Rogers

When options such as --ignore-space-change are in use, files with modifications can have no interesting textual changes worth showing.
In such cases, "git diff --stat"(man) shows 0 lines of additions and deletions. Teach "git diff --stat" not to show such a path in its output, which would be more natural.

However, we don't want to prevent the display of all files that have 0 effective diffs since they could be the result of a rename, permission change, or other similar operation that may still be of interest so we special case additions and deletions as they are always interesting.

2 Comments

I just started reading the answer and I knew, this must be researched by @vonc ;)
@Timo Researched yes, but merely reporting of the awesome work from Nguyễn Thái Ngọc Duy and Matthew Rogers: they are doing the actual work.
5

Here's a command that I find my self going to often that shows me the details for just the last commit:

git diff --stat HEAD~

it produces this output like this for the last commit:

$ git diff --stat HEAD~ blazelib/BlazeDefs.cpp | 16 +++-- blazelib/BlazeDefs.hpp | 1 - ui/code.qrc | 1 + ui/cpp/Business.cpp | 5 ++ ui/cpp/Business.hpp | 7 ++ ui/qml/components/BlazeSummaryCell.qml | 22 +++--- ui/qml/components/BlazeSummaryDetails.qml | 95 +++++++++++++++++++++++++ ui/qml/components/ConfirmEndProcedurePopup.qml | 432 +++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------- ui/qml/components/MagpieConfirmParametersPopup.qml | 24 +------ ui/qml/main.qml | 10 ++- ui/qml/shui/TitleMlText.qml | 3 +- 11 files changed, 287 insertions(+), 329 deletions(-) 

Comments

1

May be already covered earlier, you only need

git diff --compact-summary 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.