Comment obtenir une liste de tous les fichiers qui ont changé entre deux commits Git?
178
En raison de la bureaucratie, je dois obtenir une liste de tous les fichiers modifiés dans mon référentiel pour un rapport (j'ai commencé avec le code source existant).
Pour les fichiers modifiés entre un SHA donné et votre commit actuel:
git diff --name-only <starting SHA> HEAD
ou si vous souhaitez inclure des fichiers modifiés mais pas encore validés:
git diff --name-only <starting SHA>
Plus généralement, la syntaxe suivante vous indiquera toujours quels fichiers ont été modifiés entre deux commits (spécifiés par leur SHA ou d'autres noms):
et si vous voulez connaître les fichiers modifiés pour un commit particulier, faites:git diff --name-only <SHA> <SHA>^
thebugfinder
3
Utiliser l' --name-statusindicateur au lieu de --name-onlyest pratique pour obtenir une liste de fichiers et voir leur statut de modification, comme Ajouté ou Modifié.
Thane Plummer
@Amber devrait mentionner les notes de @Thane Plummer qui --name-statusmontrent ce qui leur est arrivé
Zoltán Süle
64
Pour trouver les noms de tous les fichiers modifiés depuis votre dernier commit:
git diff --name-only
Ou (pour un peu plus d'informations, y compris les fichiers non suivis):
Pour lister tous les fichiers non suivis (ceux répertoriés par git status, donc sans inclure les fichiers ignorés):
git ls-files --other --exclude-standard
Si vous l'utilisez dans un script shell et que vous souhaitez vérifier par programme si ces commandes ont renvoyé quelque chose, vous serez intéressé par git diffl' --exit-codeoption de.
Lorsque j'ai ajouté / modifié / supprimé de nombreux fichiers (depuis le dernier commit), j'aime regarder ces modifications dans l'ordre chronologique.
Pour cela j'utilise:
Pour répertorier tous les fichiers non intermédiaires:
diff-filter = [(A | C | D | M | R | T | U | X | B)… [*]]
Sélectionnez uniquement les fichiers qui sont ajoutés (A), copiés (C), supprimés (D), modifiés (M), renommés (R), dont le type (c'est-à-dire fichier normal, lien symbolique, sous-module,…) a changé (T), sont non fusionnés (U), sont inconnus (X) ou ont eu leur appariement cassé (B). Toute combinaison de caractères de filtre (y compris aucun) peut être utilisée. Lorsque * (tout ou rien) est ajouté à la combinaison, tous les chemins sont sélectionnés s'il y a un fichier qui correspond à d'autres critères dans la comparaison; s'il n'y a aucun fichier correspondant à d'autres critères, rien n'est sélectionné.
En outre, ces lettres majuscules peuvent être réduites pour exclure. Par exemple, --diff-filter = ad exclut les chemins ajoutés et supprimés.
Si vous souhaitez également afficher l'état (par exemple, A / M), passez --name-onlyà --name-status.
La liste des modifications non mises en scène peut être obtenue en utilisant git statuset la grepcommande comme ci-dessous. Quelque chose comme git status -s | grep M:
root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....
Notez que cela ne peut être utilisé que pour les modifications non organisées, donc ce n'est pas utile pour les `` fichiers qui ont changé entre deux commits Git ''
John Vandenberg
2
Avec git showvous pouvez obtenir un résultat similaire. Pour regarder le commit (tel qu'il apparaît sur la git logvue) avec la liste des fichiers inclus dans, utilisez:
git show --name-only [commit-id_A]^..[commit-id_B]
Où [commit-id_A]est le commit initial et [commit-id_B]est le dernier commit que vous voulez montrer.
Attention particulière avec ^symbole. Si vous ne mettez pas cela, les informations commit-id_A ne seront pas déployées.
Si vous voulez vérifier les fichiers modifiés, vous devez vous occuper de nombreuses petites choses comme celle qui sera la meilleure à utiliser, comme si vous voulez vérifier lequel des fichiers a changé, tapez simplement
git status - il affichera les fichiers avec les modifications
puis si vous voulez savoir quelles modifications doivent être apportées, vous pouvez le vérifier de différentes manières,
git diff - affichera toutes les modifications dans tous les fichiers
ce n'est bon que lorsqu'un seul fichier est modifié
et si vous souhaitez vérifier un fichier particulier, utilisez
Réponses:
Pour les fichiers modifiés entre un SHA donné et votre commit actuel:
ou si vous souhaitez inclure des fichiers modifiés mais pas encore validés:
Plus généralement, la syntaxe suivante vous indiquera toujours quels fichiers ont été modifiés entre deux commits (spécifiés par leur SHA ou d'autres noms):
la source
git diff --name-only <SHA> <SHA>^
--name-status
indicateur au lieu de--name-only
est pratique pour obtenir une liste de fichiers et voir leur statut de modification, comme Ajouté ou Modifié.--name-status
montrent ce qui leur est arrivéPour trouver les noms de tous les fichiers modifiés depuis votre dernier commit:
Ou (pour un peu plus d'informations, y compris les fichiers non suivis):
la source
Pour répertorier tous les Unstaged chenillés fichiers modifiés:
Pour répertorier tous les fichiers modifiés suivis par étapes :
Pour répertorier tous les fichiers modifiés suivis par étapes et non par étapes :
Pour lister tous les fichiers non suivis (ceux répertoriés par
git status
, donc sans inclure les fichiers ignorés):Si vous l'utilisez dans un script shell et que vous souhaitez vérifier par programme si ces commandes ont renvoyé quelque chose, vous serez intéressé par
git diff
l'--exit-code
option de.la source
Lorsque j'ai ajouté / modifié / supprimé de nombreux fichiers (depuis le dernier commit), j'aime regarder ces modifications dans l'ordre chronologique.
Pour cela j'utilise:
Pour répertorier tous les fichiers non intermédiaires:
Pour obtenir la dernière date de modification de chaque fichier:
Bien que Ruvim suggère dans les commentaires :
Pour les trier du plus ancien au plus récent:
Un alias facilite son utilisation:
Ou (plus court et plus efficace, grâce à ruvim )
Par exemple:
Je peux maintenant revoir mes modifications, des plus anciennes aux plus récentes.
la source
xargs
seul appelstat
? Le one-liner complet:git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
J'ai besoin d'une liste de fichiers qui avaient changé de contenu entre deux commits (seulement ajoutés ou modifiés), j'ai donc utilisé:
Les différentes options de filtre de diff de la documentation de git diff :
Si vous souhaitez également afficher l'état (par exemple, A / M), passez
--name-only
à--name-status
.la source
La liste des modifications non mises en scène peut être obtenue en utilisant
git status
et lagrep
commande comme ci-dessous. Quelque chose commegit status -s | grep M
:la source
Avec
git show
vous pouvez obtenir un résultat similaire. Pour regarder le commit (tel qu'il apparaît sur lagit log
vue) avec la liste des fichiers inclus dans, utilisez:Où
[commit-id_A]
est le commit initial et[commit-id_B]
est le dernier commit que vous voulez montrer.Attention particulière avec
^
symbole. Si vous ne mettez pas cela, les informations commit-id_A ne seront pas déployées.la source
Si vous voulez vérifier les fichiers modifiés, vous devez vous occuper de nombreuses petites choses comme celle qui sera la meilleure à utiliser, comme si vous voulez vérifier lequel des fichiers a changé, tapez simplement
git status - il affichera les fichiers avec les modifications
puis si vous voulez savoir quelles modifications doivent être apportées, vous pouvez le vérifier de différentes manières,
git diff - affichera toutes les modifications dans tous les fichiers
ce n'est bon que lorsqu'un seul fichier est modifié
et si vous souhaitez vérifier un fichier particulier, utilisez
git diff
la source