Come elencare solo i nomi di file che sono cambiati tra due commit?

Ho un sacco di commit nel repository. Voglio vedere un elenco di file modificati tra due commit: da SHA1 a SHA2.

Quale comando dovrei usare?

git diff --name-only SHA1 SHA2 

dove devi solo includere un numero sufficiente di SHA per identificare i commit. Puoi anche fare, per esempio

 git diff --name-only HEAD~10 HEAD~5 

per vedere le differenze tra il decimo ultimo commit e il quinto più recente (o giù di lì).

 git diff --name-status [SHA1 [SHA2]] 

è come –name-only, tranne che ottieni un semplice prefisso che ti dice cosa è successo al file (modificato, cancellato, aggiunto …)

 git log --name-status --oneline [SHA1..SHA2] 

è simile, ma i commit sono elencati dopo il messaggio di commit, così puoi vedere quando un file è stato modificato.

  • se sei interessato solo a quello che è successo a determinati file / cartelle puoi aggiungere -- [...] alla versione di git log .

  • se vuoi vedere cosa è successo per un singolo commit, chiamalo SHA1, quindi fallo
    git log --name-status --oneline [SHA1^..SHA1]

Flag di stato dei file:
M modificato – Il file è stato modificato
C copy-edit – Il file è stato copiato e modificato
R nome-modifica – Il file è stato rinominato e modificato
A aggiunto – Il file è stato aggiunto
D eliminato – Il file è stato cancellato
U non raggruppato: il file presenta conflitti dopo l’unione

Ma per vedere i file cambiati tra il tuo ramo e il suo antenato comune con un altro ramo (diciamo origine / master):

 git diff --name-only `git merge-base origin/master HEAD` 

Sembra che nessuno abbia menzionato lo switch --stat :

 $ git diff --stat HEAD~5 HEAD .../java/org/apache/calcite/rex/RexSimplify.java | 50 +++++++++++++++++----- .../apache/calcite/sql/fun/SqlTrimFunction.java | 2 +- .../apache/calcite/sql2rel/SqlToRelConverter.java | 16 +++++++ .../org/apache/calcite/util/SaffronProperties.java | 19 ++++---- .../org/apache/calcite/test/RexProgramTest.java | 24 +++++++++++ .../apache/calcite/test/SqlToRelConverterTest.java | 8 ++++ .../apache/calcite/test/SqlToRelConverterTest.xml | 15 +++++++ pom.xml | 2 +- .../apache/calcite/adapter/spark/SparkRules.java | 7 +-- 9 files changed, 117 insertions(+), 26 deletions(-) 

Ci sono anche --numstat

 $ git diff --numstat HEAD~5 HEAD 40 10 core/src/main/java/org/apache/calcite/rex/RexSimplify.java 1 1 core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java 16 0 core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java 8 11 core/src/main/java/org/apache/calcite/util/SaffronProperties.java 24 0 core/src/test/java/org/apache/calcite/test/RexProgramTest.java 8 0 core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java 15 0 core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml 1 1 pom.xml 4 3 spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java 

e --shortstat

 $ git diff --shortstat HEAD~5 HEAD 9 files changed, 117 insertions(+), 26 deletions(-) 

Per integrare la risposta di @ artfulrobot, se si desidera mostrare i file modificati tra due rami:

 git diff --name-status mybranch..myotherbranch 

Stai attento alla precedenza. Se si posiziona prima il ramo più nuovo, allora mostrerebbe i file come cancellati piuttosto che aggiunti.

L’aggiunta di un grep può perfezionare ulteriormente le cose:

 git diff --name-status mybranch..myotherbranch | grep "A\t" 

Questo mostrerà solo i file aggiunti in myotherbranch .

Aggiungi sotto alias al tuo ~/.bash_profile , quindi esegui, source ~/.bash_profile ; ora ogni volta che devi vedere i file aggiornati nell’ultimo commit, esecuzione, showfiles dal tuo repository git.

 alias showfiles='git show --pretty="format:" --name-only' 

Questo mostrerà le modifiche nei file:

 git diff --word-diff SHA1 SHA2 

Usa git log –pretty = oneline> C: \ nomefile.log

che registrerà solo un oneline (–pretty = oneline) che è il nome del file modificato. Inoltre registrerà tutti i dettagli nel file di output.

Nota anche, se vuoi solo vedere i file modificati tra l’ultimo commit e quello precedente. Funziona bene: git show --name-only

Come diceva artfulrobot nella sua risposta:

 git diff --name-status [SHA1 [SHA2]] 

Il mio esempio:

 git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 4b95d595812211553070046bf2ebd807c0862cca M views/layouts/default.ctp M webroot/css/theme.css A webroot/img/theme/logo.png 

Basato su git diff --name-status ho scritto l’estensione git-diffview git che rende una vista ad albero gerarchica di cosa è cambiato tra due percorsi.