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?
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).
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 faitesgit 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
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`
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(-)
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
.
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'
Cela montrera les changements dans les fichiers:
git diff --Word-diff SHA1 SHA2
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.
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
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
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.
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.
Juste pour quelqu'un qui doit se concentrer uniquement sur les fichiers Java, voici ma solution:
git diff --name-status SHA1 SHA2 | grep '\.Java$'