Git diff: ¿es posible mostrar SOLO líneas cambiadas?

Intento get solo una nueva versión de las líneas que han cambiado y no toda la otra información que muestra git diff.

Por:

git diff HEAD --no-ext-diff --unified=0 --exit-code -a --no-prefix 

Muestra:

 diff --git file1 file2 index d9db605..a884b50 100644 --- file1 +++ file2 @@ -16 +16 @@ bla bla bla -old text +new text 

lo que quiero ver es solo:

 new text 

¿Es posible?

Solo las líneas agregadas no tienen sentido en todos los casos. Si reemplazaste un bloque de text y ocurriste para include una sola línea que estaba allí antes, git tiene que coincidir y adivinar. – Por lo general, la salida de git diff se puede utilizar como input para el patch después y, por lo tanto, es significativa. Solo las líneas adicionales no se definen con precisión ya que git tiene que adivinar en algunos casos.

Si, no obstante, lo deseas, no puedes confiar solo en un signo + . Quizás filtrar toda la línea verde es mejor:

 git diff --color=always|perl -wlne 'print $1 if /^\e\[32m\+\e\[m\e\[32m(.*)\e\[m$/' 

para solo el filter de líneas eliminadas para todas las líneas rojas:

 git diff --color=always|perl -wlne 'print $1 if /^\e\[31m-(.*)\e\[m$/' 

para inspeccionar los códigos de color en la salida que podría usar:

 git diff --color=always|ruby -wne 'p $_' 

Si desea específicamente solo la new text parte del new text , utilice lo siguiente:

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

Este es básicamente tu código, conectado al command egrep con una expresión regular. La expresión regular filtrará solo las líneas que comiencen con un signo más.

Puedes usar:

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

Esto dará su resultado como "+ nuevo text"