web-dev-qa-db-fra.com

Comment lister tous les fichiers d'un commit?

Je cherche une simple commande git qui fournit une liste bien formatée de tous les fichiers qui faisaient partie de la livraison donnée par un hachage (SHA1), sans aucune information étrangère.

J'ai essayé:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

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

Existe-t-il une autre commande git qui fournira uniquement la liste que je veux, afin d’éviter de l’analyser à partir de la sortie git show?

2362
Philip Fourie

Méthode préférée (car il s'agit d'une commande plumbing; destinée à ê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é pour les scripts, car il s'agit d'une commande porcelain; destiné à être orienté 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 blocage au début.
  • L'argument --name-only affiche uniquement les noms de fichier affectés (Merci Hank).
  • L'argument -r consiste à recurse dans des sous-arbres
3149
Ryan McGeary

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 d’un commit, vous pouvez utiliser

git ls-tree --name-only -r <commit-ish>
201
Jakub Narębski

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

195
Hank Gay

J'utilise personnellement la combinaison de --stat et --oneline avec le show command:

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

Si vous n'aimez pas/voulez les statistiques d'ajout/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
147
Tuxdude

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

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

git diff --name-only START_COMMIT..END_COMMIT

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

git diff --name-status START_COMMIT..END_COMMIT
63
lunohodov

Tu peux aussi faire 

git log --name-only

et vous pouvez parcourir divers commits, commettre des messages et les fichiers modifiés.

Tapez q pour récupérer votre invite.

62
Indu Devanath

J'utilise changé alias a 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)

Des 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
46
takeshin

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

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

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

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

Cela fonctionne bien avec les commits de fusion.

37
vquintans

Utilisation 

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 d'une commande tout-en-un.

26
alpha_989
 $ git log 88ee8 ^ .. 88ee8 --name-only --pretty = "format:" 
24
Pat Notz

OK, il existe deux façons d'afficher tous les fichiers d'un commit particulier ...

Pour réduire les informations et afficher uniquement les noms des fichiers qui ont été validés, vous pouvez simplement ajouter le drapeau --name-only ou --name-status ..., ces drapeaux affichent simplement les noms de fichiers différents des validations précédentes que vous souhaitez ...

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

git diff --name-only 5f12f15 kag9f02 

Je crée également l'image ci-dessous pour montrer toutes les étapes à suivre dans cette situation:

 git diff --name-only 5f12f15 kag9f02

19
Alireza

J'utilise ceci pour obtenir la liste des fichiers modifiés entre deux changesets:

git diff --name-status <SHA1> <SHA2> | cut -f2
15
user135507

J'aime utiliser

git show --stat <SHA1>^..<SHA2>
15
Michael De Silva
git show --name-only commitCodeHere
13
George Oikonomou

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

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

Il affiche le récapitulatif de validation avec une liste de fichiers en dessous, avec leurs modes et, si ajouté, (A), supprimé (D) ou modifié (M);

$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363

Donnerait quelque chose comme:

commit f31a441398fb7834fde24c5b0c2974182a431363
Author: xx <[email protected]>
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 superflues.", Mais je pense toujours que cette liste est plus utile que juste les noms de fichiers.

12
Koen.

J'aime ça:

git diff --name-status <SHA1> <SHA1>^
11
skiphoppy

Utilisez une simple commande d'une ligne, si vous souhaitez simplement que la liste des fichiers soit modifiée lors du dernier commit:

git diff HEAD~1 --name-only
9
Developer-Sid

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
8
Ijaz Ahmad Khan

Afficher le journal.

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

git log COMMIT -1 --name-only

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

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

Listez les fichiers qui ont changé dans un commit:

git diff --name-only SHA1^ SHA1

Cela ne montre pas les messages de journal, les nouvelles lignes ou tout autre fouillis. Cela fonctionne pour n'importe quel commit, pas seulement celui en cours. Vous ne savez pas pourquoi n'a pas encore été mentionné , alors je l'ajoute.

8
Newtonx

Une combinaison de "git show --stat" (merci Ryan) et de 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.

5
seanhodges

Il existe une astuce simple à afficher sous forme de liste de fichiers: ajoutez simplement : après le hachage.

git show 9d3a52c474:

Vous pouvez ensuite percer,

git show 9d3a52c474:someDir/someOtherDir

Si vous cliquez sur un fichier, vous en aurez la version brute. ce qui est parfois ce que vous voulez si vous cherchez seulement une référence Nice ou des morceaux de code essentiels (les différences 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.

5
srcspider
git show HEAD@{0}

fonctionne bien pour moi

2
Bruce

essayez cette commande pour name et change le numéro de ligne 

git show --stat <commit-hash>

afficher uniquement les noms de fichiers 

git show --stat --name-only  <commit-hash>

pour obtenir le dernier hachage de commit puis essayez cette commande

git log -1 ou pour tous git log 

1
Jignesh Joisar

J'utilise ceci pour obtenir la liste des fichiers modifiés dans la validation de fusion

λ git log -m -1 --name-only --pretty="format:"
configs/anotherconfig.xml
configs/configsInRepo.xml

ou

λ git log -m -1 --name-status --pretty="format:"
A       configs/anotherconfig.xml
M       configs/configsInRepo.xml
1
Piotr Perak

Si vous utilisez les plugins oh-my-zsh et git, le raccourci glg est utile:

$ glg
commit f014429013e360e1e1ef4f297b315358a5d47b5e
Author: huhu <[email protected]>
Date:   Tue Dec 18 07:21:11 2018 +0800

    Refine profile page.

 mini/app.json                                |  27 ++++++++-
 mini/components/postItemTwo/postItemTwo.wxml |   6 +-
 mini/pages/daren/daren.js                    |  99 ++++++++++++++++++++++++++++++++
 mini/pages/daren/daren.json                  |   3 +
 mini/pages/daren/daren.wxml                  |  16 ++++++
 mini/pages/daren/daren.wxss                  |  27 +++++++++
1
Henry