Questa domanda richiede "numeri di riga", se non ti interessano i numeri di riga nell'output, vedi questa domanda e rispondi .
Fondamentalmente, non voglio vedere il contenuto modificato, ma solo i nomi dei file e i numeri di riga.
Questa domanda richiede "numeri di riga", se non ti interessano i numeri di riga nell'output, vedi questa domanda e rispondi .
Fondamentalmente, non voglio vedere il contenuto modificato, ma solo i nomi dei file e i numeri di riga.
Risposte:
Nota: se stai solo cercando i nomi dei file modificati ( senza i numeri di riga per le linee che sono state modificate), è facile, fai clic su questo link per un'altra risposta qui .
Non esiste un'opzione integrata per questo (e non penso che sia altrettanto utile), ma è possibile farlo in git, con l'aiuto di uno script "diff esterno".
Eccone uno piuttosto schifoso; dipenderà da te correggere l'output nel modo desiderato.
#! /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 '^[<>-]'
Per i dettagli su "diff esterno" vedere la descrizione GIT_EXTERNAL_DIFF
nella pagina del manuale di git (intorno alla linea 700, abbastanza vicino alla fine).
| grep -o '^[0-9]*'
ti dà solo numeri, supponendo che non ti interessi del lato destro.
--diff-filter=...
dove la ...
parte è il tipo di modifiche che si desidera vedere: M
per modificate, A
per aggiunte, D
per cancellate e altre per la git diff
documentazione.
Così facile:
git diff --name-only
Vai avanti e diff!
git diff --name-only master..HEAD
Numeri di riga come nel numero di righe modificate o numeri di riga effettivi contenenti le modifiche? Se si desidera il numero di righe modificate, utilizzare git diff --stat
. Questo ti dà un display come questo:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
Non esiste alcuna opzione per ottenere i numeri di riga delle modifiche stesse.
git diff master --compact-summary
L'output è:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
Questo è esattamente ciò di cui hai bisogno. Stesso formato di quando si esegue il commit o si estraggono nuovi commit da remoto.
PS: È cablato a cui nessuno ha risposto in questo modo.
1) Il mio preferito:
git diff --name-status
Prepara lo stato del file, ad esempio:
A new_file.txt
M modified_file.txt
D deleted_file.txt
2) Se vuoi statistiche, allora:
git diff --stat
mostrerà qualcosa come:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
3) Infine, se vuoi davvero solo i nomi dei file:
git diff --name-only
Mostrerà semplicemente:
new_file.txt
modified_file.txt
deleted_file
Mostra i nomi dei file e la quantità / nubmer delle righe che sono cambiate in ciascun file tra ora e il commit specificato:
git diff --stat <commit-hash>
So che questa è una vecchia domanda ma su Windows, questo filtra l'output git nei file e ha cambiato i numeri di riga:
(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>
Per estrarre i file e le righe modificate da questo è un po 'più di lavoro:
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
Su git version 2.17.1
, non esiste un flag incorporato per raggiungere questo scopo.
Ecco un comando di esempio per filtrare il nome del file e i numeri di riga da un diff unificato:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Ad esempio, il diff unificato:
$ 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
Si tradurrà in:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Per abbinare l'output dei comandi nei risultati della partita grep comuni:
$ 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]+)? )
: Trova il nome file da diff --cc <filename>
OR trova il numero di riga da @@@ <from-file-range> <from-file-range> <to-file-range>
OR Trova il testo rimanente dopo @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Rimuovi @@@[ ]\?
da ogni terza riga per ottenere prima il contesto opzionale di 1 riga ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Aggiungi \n1
ogni 3 righe tra la seconda e la terza riga per il numero di colonna.sed "N;N;N;s/\n/:/g"
: Unisci ogni 3 righe con a :
.Uso grep
come una soluzione ingenua.
$ git diff | grep -A2 -- '---'
un esempio di output:
--- 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 @@
Forse puoi vedere un risultato colorato. Ti aiuta a leggere facilmente gli output.