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.