Узнать измененные номера строк из git diff - PullRequest
2 голосов
/ 25 апреля 2020

Мне нужно знать измененные номера строк между двумя коммитами (HEAD~1 and HEAD) в репо

git diff HEAD~1 HEAD

возвращает информацию в непонятном формате diff

Мне удалось идентифицировать заново добавленные файлы или удаленные файлы, посмотрев на их маркеры в git diff (ie --- /dev/null и +++/dev/null означает добавление, удаление)

Можно ли идентифицировать номера строк в измененных файлах

Мне нужно:

path/to/file/MyClass1.java
23-56
59-60
72-74

path/to/file/MyClass2.java
1-34
54-56

23-56, 72-74 и 59-60 - это строка / диапазон строк (обозначается как номер строки), измененные между HEAD ~ 1 и HEAD

PS: некоторые из выводов, которые я нашел по другим вопросам SO, похоже, устарели. Любая помощь будет высоко оценена!

1 Ответ

3 голосов
/ 25 апреля 2020

Это должно дать разницу для измененных файлов между двумя ревизиями HEAD~1 и HEAD

git diff --unified=0 --diff-filter=M HEAD~1 HEAD 

Используя утилиту grep, измененные строки и индекс можно удалить из вывода

git diff --unified=0 --diff-filter=M HEAD~1 HEAD  | grep -v -e '^[+-]' -e '^index'

Вывод:

diff --git a/some/file b/some/file
@@ -startline1,count1 +startline2,count2 @@
...

При дальнейшей обработке с использованием утилиты sed последняя команда:

git diff --unified=0 --diff-filter=M HEAD~1 HEAD | \
grep -v -e '^[+-]' -e '^index' | \
sed 's/diff --git a.* b\//\//g; s/.*@@\(.*\)@@.*/\1/g; s/^ -//g; s/,[0-9]*//g; s/\(^[0-9]*\) +/\1-/g;'

и вывод должен выглядеть следующим образом

/some/file1
startline1-startline2
/some/file2
startline3-startline4
...
...