one files example commits branches git diff git-diff

files - Git diff: es posible mostrar SOLAMENTE líneas cambiadas



git diff files (3)

Puedes usar:

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

Esto le dará a su salida como "+ nuevo texto"

Estoy intentando obtener 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?


Sólo las líneas agregadas no tienen sentido en todos los casos. Si reemplazó un bloque de texto y tiene que incluir una sola línea que estaba allí antes, git tiene que coincidir y adivinar. - Por lo general, la salida de git diff podría usarse como entrada para el patch después y, por lo tanto, es significativa. Solo las líneas agregadas no están definidas con precisión, ya que git tiene que adivinar en algunos casos.

Sin embargo, si lo desea, no puede confiar solo en un signo + . Tal vez 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$/''

Solo para líneas eliminadas filtre 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 se podría utilizar:

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


Si desea específicamente solo la new text parte de new text , use lo siguiente:

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

Este es básicamente su código, canalizado en el comando egrep con una expresión regular. La expresión regular solo filtrará las líneas que comiencen con un signo más.