Добавленные строки можно определить, выполнив поиск +
в начале каждой строки, как предложено phd ' answer . Тем не менее, это также будет отображать --- a/file +++ b/file
на выходе.
Один способ - поиск цветного текста. В выводе diff добавленные строки представлены зеленым цветом.
git show <commit-id> --color | grep ".\[32m+"
Зеленый цвет представлен этим [32m
в ANSI и \033[32m
в ASCII, где 033
является символом ESC
. (Коды ANSI начинаются с ESC
символа или escape-символа)
Согласно hexdump , .
представляет символ ESC
в этом случае.
Пример hexdump :
printf '%b\n' 'It is \033[31mnot\033[39m intelligent to use \033[32mhardcoded ANSI\033[39m codes!' | hexdump -C
00000000 49 74 20 69 73 20 1b 5b 33 31 6d 6e 6f 74 1b 5b |It is .[31mnot.[|
00000010 33 39 6d 20 69 6e 74 65 6c 6c 69 67 65 6e 74 20 |39m intelligent |
00000020 74 6f 20 75 73 65 20 1b 5b 33 32 6d 68 61 72 64 |to use .[32mhard|
00000030 63 6f 64 65 64 20 41 4e 53 49 1b 5b 33 39 6d 20 |coded ANSI.[39m |
00000040 63 6f 64 65 73 21 0a |codes!.|
См. this для получения дополнительной информации о цветовых кодах в bash
Другой способ - изменить идентификатор ( символ +
) для добавления строк к другому символу, например ~
.
Использование show
git show <commit-id> --unified=0 --no-prefix --color=never --output-indicator-new=~ | grep "^[~]"
Использование diff
git diff HEAD <commit-id> --unified=0 --no-prefix --color=never --output-indicator-new=~ | grep "^[~]"
Что делает каждая опция?
unified=0
: установка строк контекста на 0
no-prefix
: Удаление префикса источника и получателя
color=never
: показывать разноцветные различия, чтобы не испортить часть grep
output-indicator-new=~
: изменить символ добавляемых строк с +
на ~
"^[~]"
: отфильтровать вывод diff, чтобы показать строки, начинающиеся с ~
символ
Если вы хотите исключить ~
из вывода, то вы можете направить вывод в этот
awk -F'^[~]' '{print $2}'