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.

QUESTION:

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.

ANSWER:

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/gallery.py |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

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

ANSWER:

Use:

git diff --name-only

Go forth and diff!

ANSWER:

Use:

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.

ANSWER:

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;;
esac

path=$1
old_file=$2
old_hex=$3
old_mode=$4
new_file=$5
new_hex=$6
new_mode=$7

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