Comment lister tous les fichiers dans un commit?

Je suis à la recherche d'une simple commande git qui fournit une liste bien formatée de tous les fichiers qui faisaient partie de la validation donnée par un hash (SHA1), sans informations étrangères.

J'ai essayé:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

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

Y a-t-il une autre commande git qui fournira juste la liste que je veux, afin que je puisse éviter de l'analyser à partir de la sortie git show?

2242
demandé sur Jacek Laskowski 2009-01-08 15:26:32

26 réponses

Manière Préférée (parce que c'est un plomberie commande; destiné à être programmatique):

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

Une autre façon (moins préférée pour les scripts, car c'est une commande porcelain; destinée à être orientée vers l'Utilisateur)

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

  • Le --no-commit-id supprime la sortie de l'ID de validation.
  • l'argument --pretty spécifie une chaîne de format vide pour éviter le cruft au début.
  • l'argument --name-only affiche uniquement les noms de fichiers qui ont été affectés (Merci Hank).
  • l'argument -r est de recurser en sous-arbres
2964
répondu Ryan McGeary 2016-06-07 19:18:14

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

git diff-tree --no-commit-id --name-only -r <commit-ish>

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

git ls-tree --name-only -r <commit-ish>
193
répondu Jakub Narębski 2013-01-18 12:48:24

Je vais simplement supposer que gitk n'est pas désiré pour cela. Dans ce cas, essayez git show --name-only <sha>.

181
répondu Hank Gay 2009-01-08 12:34:49

Personnellement, j'utilise la combinaison de --stat et --oneline avec afficher commande:

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

Si vous n'aimez pas/voulez l'ajout/suppression de stats, vous pouvez remplacer --stat avec --name-only

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD
121
répondu Tuxdude 2018-01-24 15:15:30

Vous pouvez également faire

git log --name-only

Et vous pouvez parcourir les différents commits, les messages de validation et les fichiers modifiés.

Tapez q pour récupérer votre invite.

58
répondu Indu Devanath 2014-07-02 06:35:56

Récemment, j'ai eu besoin de 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 Ethan le souligne ci-dessous

git diff --name-only START_COMMIT..END_COMMIT

L'utilisation de {[3] } inclura également la modification (ajoutée, modifiée, supprimée, etc.) à côté de chaque fichier

git diff --name-status START_COMMIT..END_COMMIT
57
répondu lunohodov 2015-06-21 07:25:13

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 voulez vraiment que les noms des fichiers vous pouvez ajouter la --name-only option.

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

49
répondu VaTo 2016-08-17 04:11:51

J'utilise changé alias 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 qui peuvent être utiles:

git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only
45
répondu takeshin 2013-04-30 07:31:44

Utilisation de la commande git diff standard (aussi bonne pour les scripts):

git diff --name-only <sha>^ <sha>

Si vous souhaitez également le statut des fichiers modifiés:

git diff --name-status <sha>^ <sha>

Cela fonctionne bien avec les commits de fusion.

35
répondu vquintans 2017-03-10 10:39:43
$ git log 88ee8^..88ee8 --name-only --pretty="format:"
23
répondu Pat Notz 2009-01-08 14:11:28

Utiliser

git log --name-status

Cela vous montrera l'id de validation, le message, les fichiers modifiés et s'il a été modifié, créé, ajouté ou supprimé. Un peu de tout en une seule commande.

17
répondu alpha_989 2018-05-15 16:42:35

OK, il y a plusieurs façons d'afficher tous les fichiers dans un commit...

Pour réduire les informations et afficher uniquement les noms des fichiers qui se sont engagés, vous pouvez simplement ajouter --name-only ou --name-status drapeau..., ces drapeaux vous montrent simplement les noms de fichiers qui sont différents des commits précédents comme vous le souhaitez...

Vous pouvez donc faire git diff suivi de --name-only, avec deux hachages de validation après <sha0> <sha1>, quelque chose comme ci-dessous:

git diff --name-only 5f12f15 kag9f02 

Je crée également l'image ci-dessous pour montrer toutes les étapes pour passer par dans ces situations:

git diff --nom seulement 5f12f15 kag9f02

16
répondu Alireza 2017-12-07 02:27:25

Je l'utilise pour obtenir la liste des fichiers modifiés entre deux révisions:

git diff --name-status <SHA1> <SHA2> | cut -f2
15
répondu user135507 2010-03-28 07:37:53

J'aime utiliser

git show --stat <SHA1>^..<SHA2>
15
répondu Michael De Silva 2010-11-03 08:12:26
git show --name-only commitCodeHere
12
répondu George Oikonomou 2016-01-12 13:47:31

J'aime ceci:

git diff --name-status <SHA1> <SHA1>^
11
répondu skiphoppy 2009-08-12 18:17:31

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 validation avec une liste de fichiers en dessous avec leurs modes et s'il y a ajouté (A), supprimé (D) ou modifié(M);

$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363

Donnerait quelque chose comme:

commit f31a441398fb7834fde24c5b0c2974182a431363
Author: xx <xx@xx.nl>
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 étrangères.", mais je pense toujours que cette liste est plus utile que les noms de fichiers.

11
répondu Koen. 2015-10-14 11:05:59

Utilisez une simple commande d'une ligne, si vous voulez juste que la liste des fichiers soit modifiée lors de la dernière validation:

git diff HEAD~1 --name-only
10
répondu Developer-Sid 2014-05-18 22:34:44

Liste les fichiers qui ont changé dans un commit:

git diff --name-only SHA1^ SHA1

Cela n'affiche pas les messages de journal, les nouvelles lignes supplémentaires ou tout autre encombrement. Cela fonctionne pour n'importe quel commit, pas juste l'actuel. Je ne sais pas pourquoi il n'a pas encore été mentionné tout à fait, alors je l'ajoute.

9
répondu Newtonx 2012-07-28 00:55:26

Affiche le journal.

La validation 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]"
8
répondu thefreshteapot 2015-06-09 10:17:41

Trouvé une réponse parfaite à ceci:

git show --name-status --oneline <commit-hash>

Pour que je sache

which files were just modified M

Which files were newly added , A

Which files were deleted , D
7
répondu Ijaz Khan 2017-09-01 21:51:00

Une combinaison de " git show --stat "(Merci Ryan) et quelques commandes sed devrait réduire les données pour vous:

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

Cela ne produira que la liste des fichiers modifiés.

6
répondu seanhodges 2015-06-09 10:17:13

Il y a une astuce simple à afficher comme une liste de fichiers, il suffit d'ajouter : après le hachage.

git show 9d3a52c474:

Vous pouvez alors percer,

git show 9d3a52c474:someDir/someOtherDir

Si vous appuyez sur un fichier, vous obtiendrez la version brute du fichier; ce qui est parfois ce que vous voulez si vous cherchez seulement une bonne référence ou des morceaux de code clés (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.

6
répondu srcspider 2015-08-26 11:59:32
git show HEAD@{0}

Fonctionne très bien pour moi

2
répondu Bruce 2015-06-09 10:16:50

Je pensais partager un résumé de mon alias.. aussi, je trouve que l'utilisation de ' zsh ' est géniale avec git il Chroma keys tout bien et dit que vous voulez que la branche soit en tout temps en changeant l'invite de commande.

Pour ceux qui couvrent de SVN, vous trouverez cela utile: (c'est une combinaison d'idées de différents threads, Je ne prends que le crédit de savoir comment 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 <jim@stratengllc.com>
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 <jim@stratengllc.com>
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
0
répondu Jim Zucker 2015-12-02 17:40:27

Cela devrait fonctionner:

git status

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

-1
répondu 4067098 2018-03-08 00:53:14