Этот вопрос требует "номеров строк", если вам не нужны номера строк в выходных данных, посмотрите этот вопрос и ответ .
По сути, я не хочу видеть измененный контент, только имена файлов и номера строк.
Этот вопрос требует "номеров строк", если вам не нужны номера строк в выходных данных, посмотрите этот вопрос и ответ .
По сути, я не хочу видеть измененный контент, только имена файлов и номера строк.
Ответы:
Примечание: если вы просто ищете имена измененных файлов ( без с номерами строк для строк , которые были изменены), что это легко, нажмите на эту ссылку на другой ответ здесь .
Там нет встроенной опции для этого (и я не думаю , что это все , что полезно либо), но это можно сделать в мерзавец, с помощью «внешнего дифф» сценарий.
Вот довольно дрянной; это будет зависеть от вас, чтобы исправить вывод так, как вы хотели бы.
#! /bin/sh
#
# run this with:
# GIT_EXTERNAL_DIFF=<name of script> git diff ...
#
case $# in
1) "unmerged file $@, 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 '^[<>-]'
Подробнее о "external diff" смотрите в описании GIT_EXTERNAL_DIFF
на странице руководства git (около строки 700, довольно близко к концу).
| grep -o '^[0-9]*'
дает только цифры, если вы не заботитесь о правой стороне.
--diff-filter=...
где ...
часть - это вид изменений, которые вы хотите увидеть: M
для измененных, A
для добавленных, D
для удаленных и другие в git diff
документации.
Так легко:
git diff --name-only
Иди и отличайся!
git diff --name-only master..HEAD
Номера строк, такие как количество измененных строк или фактические номера строк, содержащие изменения? Если вы хотите количество измененных строк, используйте git diff --stat
. Это дает вам такой дисплей:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
Нет возможности получить номера строк самих изменений.
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: Это связано с тем, что никто так не ответил.
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
Показывает имена файлов и количество / количество строк, которые изменились в каждом файле с настоящего момента до указанной фиксации:
git diff --stat <commit-hash>
Я знаю, что это старый вопрос, но в 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
На 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>
ИЛИ совпадение номера строки с @@@ <from-file-range> <from-file-range> <to-file-range>
ИЛИ совпадение оставшегося текста после @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Удалить @@@[ ]\?
из каждой 3-й строки, чтобы получить дополнительный 1-строчный контекст раньше ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Добавьте \n1
каждые 3 строки между 2-й и 3-й строкой для номера столбца.sed "N;N;N;s/\n/:/g"
: Соединяйте каждые 3 строки с :
.Я использую grep
как наивное решение.
$ git diff | grep -A2 -- '---'
пример вывода:
--- a/fileA.txt
+++ b/fileA.txt
@@ -0,0 +1,132 @@
--
--- a/B/fileC.txt
+++ b/B/fileC.txt
@@ -33663,3 +33663,68800 @@ word_38077.png,Latin
--
--- a/D/fileE.txt
+++ b/D/fileE.txt
@@ -17998,3 +17998,84465 @@ word_23979.png,Latin
--
--- a/F
+++ b/F
@@ -1 +1 @@
Может быть, вы можете увидеть цветной вывод. Это поможет вам легко прочитать результаты.