web-dev-qa-db-fra.com

Comment lister uniquement les noms de fichiers qui ont changé entre deux commits?

J'ai un tas de commits dans le repo. Je veux voir une liste de fichiers modifiés entre deux commits - de SHA1 à SHA2.

Quelle commande devrais-je utiliser? 

1593
Shawn
git diff --name-only SHA1 SHA2

où vous devez seulement inclure assez de SHA pour identifier les commits. Vous pouvez aussi faire, par exemple

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

pour voir les différences entre le dixième dernier engagement et le cinquième (ou presque).

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

est comme --name-only, sauf que vous avez un simple préfixe qui vous dit ce qui est arrivé au fichier (modifié, supprimé, ajouté ...)

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

est similaire, mais les commits sont listés après le message de validation, vous pouvez donc voir quand un fichier a été modifié.

  • si vous êtes intéressé par ce qui est arrivé à certains fichiers/dossiers, vous pouvez ajouter -- <filename> [<filename>...] à la version git log.

  • si vous voulez voir ce qui s'est passé pour un seul commit, appelez-le SHA1, puis faites
    git log --name-status --oneline [SHA1^..SHA1]

Drapeaux d'état du fichier:
M modified - Le fichier a été modifié
C copy-edit - Le fichier a été copié et modifié
R rename-edit - Le fichier a été renommé et modifié
Un ajouté - Le fichier a été ajouté
D supprimé - Le fichier a été supprimé.
U unmerged - Le fichier a des conflits après une fusion 

365
artfulrobot

Mais pour voir les fichiers modifiés entre votre branche et son ancêtre commun avec une autre branche (par exemple, Origin/master):

git diff --name-only `git merge-base Origin/master HEAD`
44
Tim James

Il semble que personne n’a mentionné le commutateur --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(-)

Il y a aussi --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

et --shortstat

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

Pour compléter la réponse de @ artfulrobot, si vous souhaitez afficher les fichiers modifiés entre deux branches:

git diff --name-status mybranch..myotherbranch

Faites attention à la priorité. Si vous placez d'abord la branche la plus récente, les fichiers seront alors supprimés et non ajoutés.

L'ajout d'une grep peut préciser davantage:

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

Cela affichera alors uniquement les fichiers ajoutés dans myotherbranch.

19
Max MacLeod

Ajouter alias ci-dessous à votre ~/.bash_profile, puis exécutez, source ~/.bash_profile; À présent, chaque fois que vous devez voir les fichiers mis à jour dans la dernière validation, exécutez, showfiles à partir de votre référentiel git. 

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

Cela montrera les changements dans les fichiers:

git diff --Word-diff SHA1 SHA2
7
Julio Marins

Utilisez Git log --pretty = oneline> C:\filename.log

qui enregistrera uniquement une ligne (--pretty = oneline) qui est le nom du fichier modifié. Enregistre également tous les détails dans votre fichier de sortie.

3
Agni

Notez également que si vous voulez seulement voir les fichiers modifiés entre le dernier commit et celui qui le précède. Cela fonctionne très bien: git show --name-only

3
Parris

Comme Artfulrobot l'a dit dans sa réponse:

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

Mon exemple:

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

Sur la base de git diff --name-status, j’ai écrit l’extension git-diffview git qui affiche une arborescence hiérarchique de ce qui a changé entre deux chemins.

0
Bernard Opic

Ce qui suit fonctionne bien pour moi:

$ git show --name-only --format=tformat: SHA1..SHA2

Il peut également être utilisé avec un seul commit:

git show --name-only --format=tformat: SHA1

ce qui est pratique pour une utilisation dans Jenkins où vous recevez une liste de SHA changeSet et que vous souhaitez parcourir par-dessus pour voir quels fichiers ont été modifiés. 

Cela ressemble à quelques réponses précédentes, mais utiliser tformat: plutôt que format: supprime l'espace de séparation entre les commits.

0
blindsnowmobile

Juste pour quelqu'un qui doit se concentrer uniquement sur les fichiers Java, voici ma solution:

 git diff --name-status SHA1 SHA2 | grep '\.Java$'
0
K. Symbol