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




stati di git (9)

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-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 -- <filename> [<filename>...] 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


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

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`

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.


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(-)

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


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 .


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-show