Git diff: возможно ли показывать только измененные строки
Я пытаюсь получить только новую версию строк, которые изменились, и не вся другая информация, которая показывает git diff.
Для:
git diff HEAD --no-ext-diff --unified=0 --exit-code -a --no-prefix
Он показывает:
diff --git file1 file2
index d9db605..a884b50 100644
--- file1
+++ file2
@@ -16 +16 @@ bla bla bla
-old text
+new text
то, что я хочу видеть, только:
new text
Возможно ли это?
Ответы
Ответ 1
Только добавленные строки не имеют смысла во всех случаях. Если вы заменили какой-то блок текста, и вы решили включить одну строку, которая была там раньше, git должна соответствовать и угадывать. - Обычно вывод git diff
может использоваться как вход для patch
после этого и поэтому имеет смысл. Только добавленные строки точно не определены как git, чтобы угадать в некоторых случаях.
Если вы все же хотите этого, вы не можете доверять ведущему знаку +
. Возможно, фильтрация всей зеленой линии лучше:
git diff --color=always|perl -wlne 'print $1 if /^\e\[32m\+\e\[m\e\[32m(.*)\e\[m$/'
только для фильтра удаленных линий для всех красных линий:
git diff --color=always|perl -wlne 'print $1 if /^\e\[31m-(.*)\e\[m$/'
для проверки цветовых кодов на выходе, который вы можете использовать:
git diff --color=always|ruby -wne 'p $_'
Ответ 2
Если вам требуется только часть new text
, используйте следующее:
git diff HEAD --no-ext-diff --unified=0 --exit-code -a --no-prefix | egrep "^\+"
Это в основном ваш код, который передается в команду egrep
с регулярным выражением. Регулярное выражение будет фильтровать только строки, начинающиеся со знака плюс.
Ответ 3
Вы можете использовать:
git diff -U0 <commit-hash> | grep "^\+\""
Это даст ваш результат как "+ новый текст"
Ответ 4
Вот ответ, используя grep
. Он сохраняет оригинальные красные/зеленые цвета для удобства чтения. Я предоставил несколько вариантов синтаксиса:
git diff --color | grep --color=never $'^\e\[3[12]m'
git diff --color | grep --color=never $'^\033\[3[12]m'
git diff --color | grep --color=never -P '^\e\[3[12]m'
git diff --color | grep --color=never -P '^\033\[3[12]m'
Объяснение:
git diff --color
необходим для того, чтобы git не отключал цвет, когда он перекачивает.
grep --color=never
предотвращает выделение grep выделенной строки (которая удаляет исходный цвет из исходной команды)
- Совпадение строк, начинающихся с красных (
\e[31m
) или зеленых (\e[32m
) escape-кодов.
$'...'
(синтаксис цитирования ANSI-C) или -P
(синтаксис perl) позволяют grep
интерпретировать \e
или \033
как символ ESC
.