it-swarm.com.ru

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

Является ли это возможным?

17
Artem

Только добавленные строки не имеют смысла во всех случаях. Если вы заменили какой-то блок текста и вам пришлось включить одну строку, которая была там раньше, 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 $_'
13
michas

Если вам нужна только часть new text, используйте следующее:

git diff HEAD --no-ext-diff --unified=0 --exit-code -a --no-prefix | egrep "^\+"

Это в основном ваш код, переданный в команду egrep с помощью регулярного выражения. Регулярное выражение будет фильтровать только строки, начинающиеся со знака плюс.

6
metacubed

Ты можешь использовать: 

git diff -U0 <commit-hash> | grep "^\+\""

Это даст ваш вывод в виде "+ новый текст"

1
Srini