Le journal de SVN a un mode "-v" qui sort les noms de fichiers des fichiers modifiés dans chaque commit, comme ceci:
jes5199 $ svn log -v --------------------------------------- --------------------------------- r1 | jes5199 | 2007-01-03 14:39:41 -0800 (mer., 03 janvier 2007) | 1 ligne Chemins modifiés: A/AUTHORS A /COPYING A /ChangeLog A /EVOLUTION A/INSTALL A /MacOSX
Existe-t-il un moyen rapide d’obtenir une liste des fichiers modifiés dans chaque commit de git?
Pour les noms de chemin complets des fichiers modifiés:
git log --name-only
Pour les noms de chemin complets et le statut des fichiers modifiés:
git log --name-status
Pour les chemins d'accès abrégés et un diffstat des fichiers modifiés:
git log --stat
Il y a beaucoup plus d'options, consultez la documentation .
REMARQUE: git whatchanged
est obsolète, utilisez git log
à la place
Les nouveaux utilisateurs sont encouragés à utiliser git-log [1] . La commande
whatchanged
est essentiellement la même chose que git-log [1] mais a pour valeur par défaut d’afficher la sortie diff du format brut et d’ignorer les fusions.La commande est conservée principalement pour des raisons historiques; Les doigts de nombreuses personnes qui ont appris Git bien avant que
git log
ait été inventé en lisant la liste de diffusion du noyau Linux sont formés pour le saisir.
Vous pouvez utiliser la commande git whatchanged --stat
pour obtenir une liste des fichiers modifiés dans chaque validation (avec le message de validation).
git show
est également une excellente commande.
C'est un peu comme svn diff
, mais vous pouvez lui passer un guide de commit et voir ce diff.
Si vous voulez obtenir les noms de fichiers uniquement sans le reste du message de validation, vous pouvez utiliser:
git log --name-only --pretty=format: <branch name>
Cela peut ensuite être étendu pour utiliser les différentes options contenant le nom du fichier:
git log --name-status --pretty=format: <branch name>
git log --stat --pretty=format: <branch name>
Une chose à noter lors de l'utilisation de cette méthode est qu'il y a des lignes vides dans la sortie qui devront être ignorées. Cela peut être utile si vous souhaitez voir les fichiers qui ont été modifiés sur une branche locale, mais qui ne sont pas encore transférés vers une branche distante et qu'il n'y a aucune garantie que la dernière version de la télécommande a déjà été extraite. Par exemple :
git log --name-only --pretty=format: my_local_branch --not Origin/master
Affiche tous les fichiers qui ont été modifiés sur la branche locale, mais pas encore fusionnés avec la branche principale de la télécommande.
Je l'utilise quotidiennement pour afficher l'historique des fichiers qui ont changé:
git log --stat --pretty=short --graph
Pour rester bref, ajoutez un alias dans votre .gitconfig
en faisant:
git config --global alias.ls 'log --stat --pretty=short --graph'
J'utilise ceci:
git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq
qui produit une liste de fichiers uniquement et leur état (ajouté, modifié, supprimé):
A sites/api/branding/__init__.py
M sites/api/branding/wtv/mod.py
...
git diff --stat HEAD^!
affiche les fichiers modifiés et le nombre de lignes ajoutées/supprimées pour le dernier commit (HEAD
).
Il me semble qu’il n’existe pas de commande unique pour obtenir une sortie concise composée uniquement de noms de fichiers et de comptages de lignes ajoutés et supprimés pour plusieurs commits à la fois. J’ai donc créé mon propre script bash pour cela:
#!/bin/bash
for ((i=0; i<=$1; i++))
do
sha1=`git log -1 --skip=$i --pretty=format:%H`
echo "HEAD~$i $sha1"
git diff --stat HEAD~$(($i+1)) HEAD~$i
done
Pour être appelé par exemple. ./changed_files 99
pour obtenir les modifications sous une forme concise de HEAD
à HEAD~99
. Peut être canalisé par exemple. à less
.
Je trouve ce qui suit est l’affichage idéal pour répertorier les fichiers modifiés par commit dans un format concis:
git log --pretty=oneline --graph --name-status
Une autre commande utile serait git diff-tree <hash>
où hachage peut également être une plage de hachage (notée <old>..<new>
notation). Un exemple de sortie:
$ git diff-tree HEAD
:040000 040000 8e09a be406 M myfile
Les champs sont:
mode source, mode dest, hachage source, hachage dest, statut, nom du fichier
Les statuts sont ceux que vous attendez: D (supprimé), A (ajouté), M (modifié), etc. Voir la page de manuel pour une description complète.
J'utilise généralement ceux-ci pour obtenir les journaux:
$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"
$ git log --name-status --grep="<text from Commit message>"