Этот вопрос требует номеров строк. Если вас не интересуют номера строк в выходных данных, просмотрите этот вопрос и ответ.
В принципе, я не хочу видеть измененное содержимое, только имена файлов и номера строк.
Этот вопрос требует номеров строк. Если вас не интересуют номера строк в выходных данных, просмотрите этот вопрос и ответ.
В принципе, я не хочу видеть измененное содержимое, только имена файлов и номера строк.
Примечание. Если вы просто ищете имена измененных файлов (без номеров строк для строк, которые были изменены), см. другой ответ здесь.
Для этого нет встроенной опции (и я не думаю, что это так уж и полезно), но это можно сделать в Git с помощью внешнего скрипта сравнения.
Вот довольно дрянной; Вам нужно будет исправить вывод так, как вы хотите.
#! /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 '^[<>-]'
Подробнее о внешних различиях см. В описании GIT_EXTERNAL_DIFF
на странице руководства Git (около строка 700, довольно близко к концу).
| grep -o '^[0-9]*'
дает вам только числа, если вы не заботитесь о правой части.
- person GKFX; 13.12.2016
--diff-filter=...
, где часть ...
- это тип изменений, которые вы хотите видеть: M
для измененных, A
для добавленных, D
для удаленных и других согласно git diff
документации.
- person torek; 17.05.2018
Использовать:
git diff --name-only
Идите вперед и сравните!
git diff --name-only master..HEAD
- person Hettomei; 12.01.2017
git
? У меня не работает передача хэша для сравнения (он просто возвращает инструкции по использованию команды) ... Эта альтернатива сработала для меня: git diff [hash] | grep diff
- person poshaughnessy; 28.01.2019
Номера строк как количество измененных строк или фактические номера строк, содержащих изменения? Если вы хотите количество измененных строк, используйте 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 diff-tree --no-commit-id --name-only -r
На git version 2.17.1
, нет встроенного флага для достижения этой цели.
Вот пример команды для фильтрации имени файла и номеров строк из унифицированного сравнения:
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/ @@@[ ]\?//}'
: Удалите @@@[ ]\?
из каждой третьей строки, чтобы получить необязательный контекст в 1 строку перед ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Добавляйте \n1
каждые 3 строки между 2-й и 3-й строками для номера столбца.sed "N;N;N;s/\n/:/g"
: соединяйте каждые 3 строки с :
.Попробуй использовать:
git dif | grep -B <number of before lines to show> <regex>
В моем случае я попытался найти то место, где я поместил оператор отладки во многих файлах. Мне нужно было увидеть, в каком файле уже есть этот отладочный оператор, например:
git diff | grep -B 5 dd\(
Я использую 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 @@
Может быть, вы видите цветной вывод. Это поможет вам легко прочитать вывод.