3259 votes

Comment lister tous les fichiers d'un commit ?

Je recherche une commande Git simple qui fournisse une liste joliment formatée de tous les fichiers faisant partie de la livraison, avec un hachage (SHA-1), sans informations superflues.

J'ai essayé :

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Bien qu'il énumère les fichiers, il inclut également des informations diff indésirables pour chacun d'entre eux.

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

51 votes

Je suis venu ici pour chercher quelque chose d'un peu différent. Je veux voir tous les fichiers modifiés pour un ensemble de commits et j'ai fini par utiliser git log --until 2013-05-21 --pretty="short" --name-only avec un bon effet.

8 votes

Utilisez cette commande pour obtenir tous les changements depuis le précédent n s'engage jusqu'à ce que master : git diff-tree --name-status -r @{3} master

5 votes

git diff --name-only master - Pour lister TOUS les fichiers modifiés sur la branche courante, en les comparant à la branche master.

4392voto

Ryan McGeary Points 76053

Voie préférée (parce que c'est un plomberie commande ; destinée à être programmée) :

$ 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 scripts, car c'est une porcelaine commande ; destinée à être orientée vers l'utilisateur)

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

  • El --no-commit-id supprime la sortie de l'ID d'engagement.
  • El --pretty spécifie une chaîne de format vide, afin d'éviter les éléments inutiles au début.
  • El --name-only ne montre que les noms de fichiers qui ont été affectés (Merci Hank). Utilisez --name-status à la place, si vous voulez voir ce qui est arrivé à chaque fichier ( D supprimé, M odifié, A dded)
  • El -r l'argument est de récurer dans les sous-arbres

2 votes

Cela montre aussi tous les fichiers qui ont été détraqués avec git rm --cached <file> . Cela rend commettre n'est qu'un terme technique dans ce cas et montrer un tas de fichiers (dans le cadre du commit) est totalement trompeur car Git ne montre pas si un fichier a été ajouté ou supprimé.

3 votes

Cela ne fonctionne pas pour un commit de fusion. Message : Merge branch '<branch>' of bitbucket.org:xxx/xxx into master

36 votes

Il convient de noter que diff-tree ne fonctionnera pas si l'on regarde le commit racine.

306voto

Jakub Narębski Points 87537

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

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

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

git ls-tree --name-only -r <commit-ish>

1 votes

Le ls-tree avec --name-only ne semble pas fonctionner sur 1.6.4.4 ou 1.6.3.3. Pensez-vous qu'il s'agisse d'un bogue ?

0 votes

git ls-tree --name-only HEAD (le paramètre <commit-ish> est requis ; dans cet exemple il s'agit de HEAD) fonctionne pour moi avec git version 1.6.4.3

2 votes

Il s'avère que l'ordre des paramètres est significatif ici. Celui de votre post ne fonctionne pas, alors que celui de votre réponse hace travailler - au moins jusqu'à ce que vous mettiez votre poste à jour ;)

269voto

Hank Gay Points 36173

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

40 votes

--name-only est suffisant dans la plupart des cas où j'en ai eu besoin ; Par conséquent, j'ai upvoted la solution la plus courte (et la seule dont je me souviendrais en un essai).

0 votes

En tant que personne qui aime vraiment CLI git, gitk est en fait une façon décente de revoir les fichiers et d'afficher le fichier sur lequel se trouve la différence. Par exemple, Code revoit un commit monstre d'un pair.

3 votes

La réponse la plus courte et la plus facile à retenir.

242voto

Tuxdude Points 8652

J'utilise personnellement la combinaison de --stat y -online avec le montrer commandement :

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'ajout/suppression, 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

6 votes

C'est génial ! Il vous donne essentiellement le résumé du fichier que Github affiche en haut de la vue d'un commit. Merci.

1 votes

Très bien. Pour définir un alias : alias gits='git show --stat --oneline' alors gits par lui-même montre les derniers changements (dans HEAD), tandis que gits b24f5fb peut être utilisé pour montrer les changements de n'importe quelle révision.

5 votes

On pourrait aussi créer un alias git... par exemple peut-être git config --global alias.changes 'show --stat --oneline' . Ensuite, vous pouvez taper git changes (avec un commit-ish optionnel) et obtenir le résultat des premiers exemples ci-dessus.

74voto

lunohodov Points 1171

Récemment, j'ai eu besoin de lister tous les fichiers modifiés entre deux commits. J'ai donc utilisé cette commande (également spécifique à *nix)

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

Ou comme Ethan souligne :

git diff --name-only START_COMMIT..END_COMMIT

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

git diff --name-status START_COMMIT..END_COMMIT

5 votes

Si vous utilisez git diff --name-status START_COMMIT..END_COMMIT alors vous n'avez pas besoin de la terminaison |sort | uniq .

1 votes

Correction au commentaire ci-dessus : git diff --name-only START_COMMIT..END_COMMIT

0 votes

C'est ce que je cherchais. Comment je l'ai utilisé : git diff --name-only START_COMMIT..END_COMMIT | grep -v -e '**.png' -e '**.xml' . Je voulais une liste des changements de code uniquement pour un énorme RP qui avait ajouté des milliers de PNG et de mises en page XML.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X