В принципе, я не хочу видеть измененный контент, просто имена файлов и номера строк.
Могу ли я сделать 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
-
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>
ИЛИ Совпадение с оставшимся текстом после@@@
. -
sed -e '0~3{s/@@@[ ]\?//}'
: Удалить@@@[ ]\?
из каждой третьей строки, чтобы получить необязательный 1-строчный контекст перед++<<<<<<< HEAD
. -
sed '2~3 s/$/\n1/g'
: добавьте\n1
каждые 3 строки между 2-й и 3-й строкой для номера столбца. -
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: Это связано, что никто так не ответил.