Могу ли я сделать git diff только показать измененные имена файлов и номера строк?

В принципе, я не хочу видеть измененный контент, просто имена файлов и номера строк.

Ответ 1

Примечание. Если вы просто ищете имена измененных файлов ( без номеров строк для строк, которые были изменены) просто нажмите эту ссылку и нажмите здесь.


Для этого нет встроенной опции (и я не думаю, что все это полезно), но это можно сделать в git с помощью "внешней diff" script.

Здесь довольно дерьмовый; вам будет нужно исправить выход так, как вам хотелось бы.

#! /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 '^[<>-]'

Подробнее о "внешнем различии" см. описание GIT_EXTERNAL_DIFF на странице git (около строки 700, довольно близко до конца).

Ответ 2

Так легко:

git diff --name-only

Идем дальше и разбираемся!

Ответ 3

Номера строк, как в числе измененных строк, или фактические номера строк, содержащие изменения? Если вы хотите количество измененных строк, используйте git diff --stat. Это дает вам такой вид:

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

Невозможно получить номера строк самих изменений.

Ответ 4

Я знаю, что это старый вопрос, но в Windows это фильтрует вывод git для файлов и измененных номеров строк:

(git diff -p --stat) | findstr "@@ --git"

diff --git a/dir1/dir2/file.cpp b/dir1/dir2/file.cpp
@@ -47,6 +47,7 @@ <some function name>
@@ -97,7 +98,7 @@ <another functon name>

Чтобы извлечь файлы и измененные строки, это немного больше:

for /f "tokens=3,4* delims=-+ " %f in ('^(git diff -p --stat .^) ^| findstr ^"@@ --git^"') do @echo %f

a/dir1/dir2/file.cpp
47,7
98,7

Ответ 5

Показывает имена файлов и количество/количество строк, которые изменились в каждом файле с настоящего момента до указанной фиксации:

git diff --stat <commit-hash>

Ответ 6

Самый чистый вывод, то есть только имена файлов/пути, идет с

git diff-tree --no-commit-id --name-only -r

НТН

Ответ 7

1) Мой любимый:

git diff --name-status

Зависит от статуса файла, например:

A   new_file.txt
M   modified_file.txt 
D   deleted_file.txt

2) Если вам нужна статистика, то:

git diff --stat

покажет что-то вроде:

new_file.txt         |  50 +
modified_file.txt    | 100 +-
deleted_file         |  40 -

3) Наконец, если вы действительно хотите только имена файлов:

git diff --name-only

Просто покажет:

new_file.txt
modified_file.txt
deleted_file

Ответ 8

git diff для каждой строки между файлами

git diff --name-only для отображения имен файлов

Ответ 9

В git version 2.17.1 для этой цели нет встроенного флага.

Вот пример команды для фильтрации имени файла и номеров строк из унифицированного diff:

git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'

Например, унифицированный diff:

$ git diff --unified=0
diff --cc foobar
index b436f31,df63c58..0000000
--- a/foobar
+++ b/foobar
@@@ -1,2 -1,2 +1,6 @@@ Line abov
++<<<<<<< HEAD
 +bar
++=======
+ foo
++>>>>>>> Commit message

Приведет к:

❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1

Чтобы сопоставить вывод команд в общих результатах сопоставления grep:

$ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )| @@@.*' | sed -e '0~3{s/ @@@[ ]\?//}' | sed '2~3 s/$/\n1/g' | sed "N;N;N;s/\n/:/g"
foobar:1:1:Line abov
  1. grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? ): Сопоставить имя файла из diff --cc <filename> ИЛИ diff --cc <filename> номер строки из @@@<from-file-range> <from-file-range> <to-file-range> ИЛИ Совпадение с оставшимся текстом после @@@.
  2. sed -e '0~3{s/@@@[ ]\?//}': Удалить @@@[ ]\? из каждой третьей строки, чтобы получить необязательный 1-строчный контекст перед ++<<<<<<< HEAD.
  3. sed '2~3 s/$/\n1/g': добавьте \n1 каждые 3 строки между 2-й и 3-й строкой для номера столбца.
  4. sed "N;N;N;s/\n/: /g": соединяйте каждые 3 строки с помощью :

Ответ 10

git diff master --compact-summary

Выход:

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

Это именно то, что вам нужно. Тот же формат, что и при совершении или получении новых коммитов с пульта.

PS: Это связано, что никто так не ответил.