Esta pregunta requiere "números de línea", si no le importan los números de línea en la salida, vea esta pregunta y responda .
Básicamente, no quiero ver el contenido modificado, solo los nombres de archivo y los números de línea.
Esta pregunta requiere "números de línea", si no le importan los números de línea en la salida, vea esta pregunta y responda .
Básicamente, no quiero ver el contenido modificado, solo los nombres de archivo y los números de línea.
Respuestas:
Nota: si solo está buscando los nombres de los archivos modificados ( sin los números de línea de las líneas que se modificaron), es fácil, haga clic en este enlace para obtener otra respuesta aquí .
No hay una opción integrada para esto (y tampoco creo que sea tan útil), pero es posible hacerlo en git, con la ayuda de un script "externo".
Aquí hay uno bastante malo; dependerá de usted arreglar la salida de la manera que le gustaría.
#! /bin/sh
#
# run this with:
# GIT_EXTERNAL_DIFF=<name of script> git diff ...
#
case $# in
1) "unmerged file $@, can't show you line numbers"; exit 1;;
7) ;;
*) echo "I don't know what to do, help!"; exit 1;;
esac
path=$1
old_file=$2
old_hex=$3
old_mode=$4
new_file=$5
new_hex=$6
new_mode=$7
printf '%s: ' $path
diff $old_file $new_file | grep -v '^[<>-]'
Para obtener detalles sobre "diff externo", consulte la descripción GIT_EXTERNAL_DIFF
en la página del manual de git (alrededor de la línea 700, muy cerca del final).
| grep -o '^[0-9]*'
le da solo números, suponiendo que no le importe el lado derecho.
--diff-filter=...
donde la ...
parte es el tipo de cambios que desea ver: M
para modificado, A
para agregado, D
para eliminado y otros según la git diff
documentación.
Tan fácil:
git diff --name-only
¡Sal y difunde!
git diff --name-only master..HEAD
¿Números de línea como el número de líneas cambiadas o los números de línea reales que contienen los cambios? Si desea el número de líneas cambiadas, use git diff --stat
. Esto te da una pantalla como esta:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
No hay opción para obtener los números de línea de los cambios en sí.
git diff master --compact-summary
Salida es:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
Esto es exactamente lo que necesitas. Mismo formato que cuando realiza commit o extrae nuevos commits desde remoto.
PD: Eso está conectado que nadie respondió de esta manera.
1) Mi favorito:
git diff --name-status
Antecede el estado del archivo, por ejemplo:
A new_file.txt
M modified_file.txt
D deleted_file.txt
2) Si quieres estadísticas, entonces:
git diff --stat
mostrará algo como:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
3) Finalmente, si realmente solo quieres los nombres de archivo:
git diff --name-only
Simplemente mostrará:
new_file.txt
modified_file.txt
deleted_file
Muestra los nombres de archivo y la cantidad / nubmer de líneas que cambiaron en cada archivo entre ahora y la confirmación especificada:
git diff --stat <commit-hash>
Sé que esta es una pregunta antigua, pero en Windows, filtra la salida de git a los archivos y cambia los números de línea:
(git diff -p --stat) | findstr "@@ --git"
diff --git a/dir1/dir2/file.cpp b/dir1/dir2/file.cpp
@@ -47,6 +47,7 @@ <some function name>
@@ -97,7 +98,7 @@ <another functon name>
Para extraer los archivos y las líneas cambiadas de eso es un poco más trabajo:
for /f "tokens=3,4* delims=-+ " %f in ('^(git diff -p --stat .^) ^| findstr ^"@@ --git^"') do @echo %f
a/dir1/dir2/file.cpp
47,7
98,7
Encendido git version 2.17.1
, no hay una bandera incorporada para lograr este propósito.
Aquí hay un comando de ejemplo para filtrar el nombre de archivo y los números de línea de un diff unificado:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Por ejemplo, el diff unificado:
$ git diff --unified=0
diff --cc foobar
index b436f31,df63c58..0000000
--- a/foobar
+++ b/foobar
@@@ -1,2 -1,2 +1,6 @@@ Line abov
++<<<<<<< HEAD
+bar
++=======
+ foo
++>>>>>>> Commit message
Resultará en:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Para hacer coincidir la salida de comandos en resultados comunes de coincidencia grep:
$ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )| @@@.*' | sed -e '0~3{s/ @@@[ ]\?//}' | sed '2~3 s/$/\n1/g' | sed "N;N;N;s/\n/:/g"
foobar:1:1:Line abov
grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )
: Coincide con el nombre de archivo de diff --cc <filename>
OR coincide con el número de línea de @@@ <from-file-range> <from-file-range> <to-file-range>
OR coincide con el texto restante después @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Eliminar @@@[ ]\?
de cada 3a línea para obtener el contexto opcional de 1 línea antes ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Agregue \n1
cada 3 líneas entre la 2da y 3ra línea para el número de columna.sed "N;N;N;s/\n/:/g"
: Únete cada 3 líneas con a :
.Lo uso grep
como una solución ingenua.
$ git diff | grep -A2 -- '---'
un ejemplo de salida:
--- a/fileA.txt
+++ b/fileA.txt
@@ -0,0 +1,132 @@
--
--- a/B/fileC.txt
+++ b/B/fileC.txt
@@ -33663,3 +33663,68800 @@ word_38077.png,Latin
--
--- a/D/fileE.txt
+++ b/D/fileE.txt
@@ -17998,3 +17998,84465 @@ word_23979.png,Latin
--
--- a/F
+++ b/F
@@ -1 +1 @@
Tal vez puedas ver una salida en color. Le ayuda a leer las salidas fácilmente.