Comment lister tous les fichiers dans un commit?

Je cherche une commande git simple qui fournit une liste joliment formatée de tous les fichiers faisant partie de la validation donnée par un hachage (SHA1), sans informations supplémentaires.

J’ai essayé:

 git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d 

Bien qu’il répertorie les fichiers, il inclut également des informations de diffusion indésirables pour chacun.

Existe-t-il une autre commande git qui fournira uniquement la liste que je souhaite, afin de ne pas pouvoir l’parsingr depuis la sortie de git show ?

Manière préférée (parce que c’est une commande de plomberie , censée être programmatique):

 $ git diff-tree --no-commit-id --name-only -r bd61ad98 index.html javascript/application.js javascript/ie6.js 

Une autre manière (moins préférée pour les scripts, car c’est une commande de porcelaine , destinée à être orientée vers l’utilisateur)

 $ git show --pretty="" --name-only bd61ad98 index.html javascript/application.js javascript/ie6.js 

  • L’ --no-commit-id supprime la sortie de l’ID de validation.
  • L’argument --pretty spécifie une chaîne de format vide pour éviter les erreurs au début.
  • L’argument --name-only affiche uniquement les noms de fichiers affectés (merci Hank).
  • L’argument -r consiste à rentrer dans des sous-arbres

Si vous voulez obtenir la liste des fichiers modifiés:

 git diff-tree --no-commit-id --name-only -r  

Si vous voulez obtenir la liste de tous les fichiers dans un commit, vous pouvez utiliser

 git ls-tree --name-only -r  

Je suppose que gitk n’est pas souhaité pour cela. Dans ce cas, essayez git show --name-only .

J’utilise personnellement la combinaison de –stat et –oneline avec la commande show :

 git show --stat --oneline HEAD git show --stat --oneline b24f5fb git show --stat --oneline HEAD^^..HEAD 

Si vous n’aimez pas / ne voulez pas les statistiques d’addition / suppression, vous pouvez remplacer –stat par –name-only

 git show --name-only --oneline HEAD git show --name-only --oneline b24f5fb git show --name-only --oneline HEAD^^..HEAD 

Récemment, je devais lister tous les fichiers modifiés entre deux commits. J’ai donc utilisé cette commande (aussi spécifique à * nix)

 git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq 

Mise à jour : Ou comme le souligne Ethan ci-dessous

 git diff --name-only START_COMMIT..END_COMMIT 

Utiliser --name-status inclura également le changement (ajouté, modifié, supprimé, etc.) à côté de chaque fichier

 git diff --name-status START_COMMIT..END_COMMIT 

Vous pouvez aussi faire

 git log --name-only 

et vous pouvez parcourir différents commits, commettre des messages et modifier les fichiers.

Tapez q pour récupérer votre invite.

Forme la plus simple:

git show --stat (hash)

C’est plus facile à retenir et cela vous donnera toutes les informations dont vous avez besoin.

Si vous ne voulez vraiment que les noms des fichiers, vous pouvez append l’option --name-only .

git show --stat --name-only (hash)

J’utilise un alias modifié assez souvent. Pour le configurer:

 git config --global alias.changed 'show --pretty="format:" --name-only' 

puis:

 git changed (lists files modified in last commit) git changed bAda55 (lists files modified in this commit) git changed bAda55..ff0021 (lists files modified between those commits) 

Commandes similaires pouvant être utiles:

 git log --name-status --oneline (very similar, but shows what actually happened M/C/D) git show --name-only 

Utilisation de la commande standard git diff (également utile pour les scripts):

 git diff --name-only ^  

Si vous voulez aussi le statut des fichiers modifiés:

 git diff --name-status ^  

Cela fonctionne bien avec les commits de fusion.

 $ git log 88ee8 ^ .. 88ee8 --name-only --pretty = "format:"

OK, il y a plusieurs façons d’afficher tous les fichiers dans un commit particulier …

Pour réduire les informations et afficher uniquement les noms des fichiers qui ont été --name-only , vous pouvez simplement append --name-only ou --name-status flag …, ces indicateurs vous montrent simplement les noms de fichiers qui diffèrent des commits précédents. vouloir…

Donc, vous pouvez faire git diff suivi de --name-only , avec deux hashes après , quelque chose comme ci-dessous:

 git diff --name-only 5f12f15 kag9f02 

Je crée également l’image ci-dessous pour montrer toutes les étapes à suivre dans ces situations:

git diff --name-only 5f12f15 kag9f02

Je l’utilise pour obtenir la liste des fichiers modifiés entre deux changesets:

 git diff --name-status   | cut -f2 

J’aime utiliser

 git show --stat ^.. 
 git show --name-only commitCodeHere 

J’aime ça:

 git diff --name-status  ^ 

Il y a aussi git whatchanged , qui est plus bas que git log

 NAME git-whatchanged - Show logs with difference each commit introduces 

Il affiche le résumé de la validation avec une liste de fichiers en dessous avec leurs modes et s’il a été ajouté ( A ), supprimé ( D ) ou modifié ( M );

 $ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363 

Donnerait quelque chose comme:

 commit f31a441398fb7834fde24c5b0c2974182a431363 Author: xx  Date: Tue Sep 29 17:23:22 2015 +0200 added fb skd and XLForm :000000 100644 0000000... 90a20d7... A Pods/Bolts/Bolts/Common/BFCancellationToken.h :000000 100644 0000000... b5006d0... A Pods/Bolts/Bolts/Common/BFCancellationToken.m :000000 100644 0000000... 3e7b711... A Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h :000000 100644 0000000... 9c8a7ae... A Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m :000000 100644 0000000... bd6e7a1... A Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h :000000 100644 0000000... 947f725... A Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m :000000 100644 0000000... cf7dcdf... A Pods/Bolts/Bolts/Common/BFDefines.h :000000 100644 0000000... 02af9ba... A Pods/Bolts/Bolts/Common/BFExecutor.h :000000 100644 0000000... 292e27c... A Pods/Bolts/Bolts/Common/BFExecutor.m :000000 100644 0000000... 827071d... A Pods/Bolts/Bolts/Common/BFTask.h ... 

Je sais que cette réponse ne correspond pas vraiment “sans informations supplémentaires”, mais je pense toujours que cette liste est plus utile que les noms de fichiers.

Utilisez la commande simple one line, si vous souhaitez simplement que la liste des fichiers modifiés lors du dernier commit:

 git diff HEAD~1 --name-only 

Listez les fichiers qui ont changé dans une validation:

 git diff --name-only SHA1^ SHA1 

Cela ne montre pas les messages de journal, les nouvelles lignes, ou tout autre encombrement. Cela fonctionne pour tout engagement, pas seulement celui en cours. Je ne sais pas pourquoi cela n’a pas encore été mentionné, alors je l’ajoute.

Afficher le journal

COMMIT peut être vide (“”) ou le sha-1 ou le sha-1 raccourci.

 git log COMMIT -1 --name-only 

Cela listera uniquement les fichiers, très utiles pour un traitement ultérieur.

 git log COMMIT -1 --name-only --pretty=format:"" | grep "[^\s]" 

Utilisation

 git log --name-status 

Cela vous montrera l’ID de validation, le message, les fichiers modifiés et si elle a été modifiée, créée, ajoutée ou supprimée. Un peu d’une commande tout-en-un.

Trouvé une réponse parfaite à ceci:

 git show --name-status --oneline  

Pour que je puisse savoir

 which files were just modified M Which files were newly added , A Which files were deleted , D 

Une combinaison de ” git show --stat ” (merci Ryan) et quelques commandes sed devraient réduire les données pour vous:

 git show --stat  | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//" 

Cela produira juste la liste des fichiers modifiés.

Il y a une astuce simple à afficher en tant que liste de fichiers, ajoutez simplement : après le hachage.

 git show 9d3a52c474: 

Vous pouvez ensuite explorer,

 git show 9d3a52c474:someDir/someOtherDir 

Si vous tapez un fichier, vous obtiendrez la version brute du fichier; ce qui est parfois ce que vous voulez si vous ne cherchez qu’une référence ou des morceaux de code (les diffs peuvent tout gâcher),

 git show 9d3a52c474:someDir/someOtherDir/somefile 

Le seul inconvénient de cette méthode est qu’elle ne montre pas facilement une arborescence de fichiers.

 git show HEAD@{0} 

fonctionne bien pour moi

Je pensais que je partagerais un résumé de mon alias .. aussi je trouve que l’utilisation de ‘zsh’ génial avec git it tout ce que les clés de chrominance et indique que vous voulez une twig sont tout le temps en changeant l’invite de commande.

Pour ceux qui couvrent de SVN, vous trouverez ceci utile: (il s’agit d’une combinaison d’idées provenant de différents threads, je ne suis reconnaissant que de savoir utiliser le copier / coller)

 .gitconfig: ls = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative --name-status >>git ls * 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker| | A icds.xcodeproj/project.pbxproj | A icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata | A icds/AppDelegate.m | A icds/Assets.xcassets/AppIcon.appiconset/Contents.json * e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker| | D Classes/AppInfoViewControler.h | D Classes/AppInfoViewControler.m | D Classes/CurveInstrument.h .gitconfig: lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative >>git lt * 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker * e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker * 778bda6 - Cleanup for new project (11 hours ago) Jim Zucker * 7373b5e - clean up files from old version (11 hours ago) Jim Zucker * 14a8d53 - (tag: 1.x, origin/swift, origin/master, master) Initial Commit (16 hours ago) Jim Zucker .gitconfig lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative >> git lt commit 99f21a61de832bad7b2bdb74066a08cac3d0bf3c Author: Jim Zucker  Date: Tue Dec 1 22:23:10 2015 -0800 New Files from xcode 7 A icds.xcodeproj/project.pbxproj A icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata commit e0a1bb6b59ed6a4f9147e894d7f7fe00283fce8d Author: Jim Zucker  Date: Tue Dec 1 22:17:00 2015 -0800 Move everything to old D Classes/AppInfoViewControler.h D Classes/AppInfoViewControler.m D Classes/CurveInstrument.h D Classes/CurveInstrument.m 

Cela devrait fonctionner:

 git status 

Cela montrera ce qui n’est pas mis en scène et ce qui est mis en scène.