Can I make 'git diff' only display the line numbers AND changed file names? – Dev

The best answers to the question “Can I make 'git diff' only display the line numbers AND changed file names?” in the category Dev.


This question calls for “line numbers”. If you do not care about line numbers in the output, see this question and answer.

Basically, I don’t want to see the changed content, just the file names and line numbers.


Line numbers as in number of changed lines or the actual line numbers containing the changes? If you want the number of changed lines, use git diff --stat. This gives you a display like this:

[[email protected]:~/newsite:master]> git diff --stat
 whatever/views/ |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

There is no option to get the line numbers of the changes themselves.



git diff --name-only

Go forth and diff!



git diff master --compact-summary

The output is:

 src/app/components/common/sidebar/toolbar/toolbar.component.html   |  2 +-
 src/app/components/common/sidebar/toolbar/toolbar.component.scss   |  2 --

This is exactly what you need. The same format as when you are making a commit or pulling new commits from the remote.

PS: It’s weird that nobody answered this way.


Note: if you’re just looking for the names of changed files (without the line numbers for lines that were changed), see another answer here.

There’s no built-in option for this (and I don’t think it’s all that useful either), but it is possible to do this in Git, with the help of an “external diff” script.

Here’s a pretty crappy one; it will be up to you to fix up the output the way you would like it.

#! /bin/sh
# run this with:
#    GIT_EXTERNAL_DIFF=<name of script> git diff ...
case $# in
1) "unmerged file [email protected], can't show you line numbers"; exit 1;;
7) ;;
*) echo "I don't know what to do, help!"; exit 1;;


printf '%s: ' $path
diff $old_file $new_file | grep -v '^[<>-]'

For details on “external diff”, see the description of GIT_EXTERNAL_DIFF on the Git manual page (around line 700, pretty close to the end).