Как вывести только новые строки, добавленные в git идентификатор фиксации? - PullRequest
0 голосов
/ 11 января 2020

Как вывести только новые строки, добавленные в git идентификатор фиксации? Я не нашел соответствующего использования git show

Ответы [ 2 ]

2 голосов
/ 11 января 2020

Отфильтруйте вывод по + в первом столбце:

git show <commit-id> | grep '^\+'
1 голос
/ 12 января 2020

Добавленные строки можно определить, выполнив поиск + в начале каждой строки, как предложено 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}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...