Comment lister uniquement les noms de fichier qui ont changé entre deux propagations?
j'ai un tas de commits dans le dépôt. Je veux voir une liste de fichiers modifiés entre deux propagations-de SHA1 à SHA2.
Quelle commande dois-je utiliser?
11 réponses
git diff --name-only SHA1 SHA2
où il suffit d'inclure suffisamment 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 la dixième dernier commit et le cinquième plus tard (ou presque).
git diff --name-status [SHA1 [SHA2]]
est comme --name-only, sauf que vous obtenez un simple préfixe vous indiquant 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 propagation, donc vous pouvez 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 versiongit 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 de statut de fichier:
M modifié-le fichier a été modifié
C copier-éditer le Fichier a été copié et modifié
R renommez-modifier le Fichier a été renommé et modifié
Un ajout - Fichier a été ajouté
D supprimé-le fichier a été supprimé
U dissociées Fichier a des conflits après une fusion
mais pour voir les fichiers changés entre votre branche et son ancêtre commun avec une autre branche (dire origine/maître):
git diff --name-only `git merge-base origin/master HEAD`
il semble que personne n'ait mentionné l'interrupteur --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 voulez montrer les fichiers modifiés entre deux branches:
git diff --name-status mybranch..myotherbranch
attention sur la priorité. Si vous placez la nouvelle branche en premier, alors elle montrerait des fichiers supprimés plutôt qu'ajoutés.
Ajouter un grep
peut affiner les choses plus loin:
git diff --name-status mybranch..myotherbranch | grep "A\t"
qui affichera alors seulement les fichiers ajoutés dans myotherbranch
.
ajoutez l'alias ci-dessous à votre ~/.bash_profile
, puis lancez, source ~/.bash_profile
; maintenant à tout moment vous avez besoin de voir les fichiers mis à jour dans la dernière propagation, Lancez, showfiles
à partir de votre dépôt git.
alias showfiles='git show --pretty="format:" --name-only'
cela affichera les changements dans les fichiers:
git diff --word-diff SHA1 SHA2
Use git log -- pretty=oneline >C:\filename.log
qui n'enregistre qu'une seule ligne (--pretty=oneline) c'est le nom du fichier modifié. Aussi va enregistrer tous les détails dans votre fichier de sortie.
notez aussi, si vous voulez juste voir les fichiers modifiés entre le dernier commit et celui d'avant. Cela fonctionne très bien: git show --name-only
comme le dit artfulrobot 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
basé sur git diff --name-status
j'ai écrit le git-diffview extension git qui rend une vue d'arbre hiérarchique de ce qui a changé entre deux chemins.