Como listar todos os arquivos em um commit?

Estou à procura de um comando simples git que fornece uma lista formatada de todos os ficheiros que faziam parte do commit dado por um hash (SHA1), sem informações estranhas.

eu tentei:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

apesar de enumerar os ficheiros, também inclui informação indesejada de diferenças para cada um deles.

existe outro comando git que irá fornecer apenas a lista que eu quero, para que eu possa evitar analisá-la a partir do Resultado git show?

 2242
Author: Jacek Laskowski, 2009-01-08

26 answers

Modo preferido (porque é um comando de canalização ; destinado a ser programático):

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

Outra maneira (menos preferida para scripts, porque é um comando de porcelana ; destinado a ser virado para o utilizador)

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

  • o --no-commit-id suprime o resultado do ID de persistência.
  • o argumento --pretty especifica um texto de formato vazio para evitar o cruzeiro no início.
  • o argumento --name-only mostra apenas os nomes dos ficheiros que eram afectado (obrigado Hank).
  • o argumento -r é repetir em sub-árvores
 2964
Author: Ryan McGeary, 2016-06-07 19:18:14

Se quiser obter a lista de ficheiros alterados:

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

Se você quiser obter a lista de todos os arquivos em um commit, você pode usar

git ls-tree --name-only -r <commit-ish>
 193
Author: Jakub Narębski, 2013-01-18 12:48:24
Vou presumir que não é desejado para isto. Nesse caso, tente git show --name-only <sha>
 181
Author: Hank Gay, 2009-01-08 12:34:49

Eu uso pessoalmente a combinação de -- stat e -- oneline com o comando show:

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

Se não gostar/quiser as estatísticas de adição/ remoção, poderá substituir -- stat por --name-only

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD
 121
Author: Tuxdude, 2018-01-24 15:15:30

Também podes fazer

git log --name-only

E você pode navegar através de vários commits, mensagens de commit e os arquivos alterados.

Escreva q para obter o seu prompt de volta.

 58
Author: Indu Devanath, 2014-07-02 06:35:56

Recentemente eu precisava listar todos os arquivos alterados entre dois commits. Então eu usei este comando (também * específico do nix)

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

Update : ou como Ethan aponta abaixo

git diff --name-only START_COMMIT..END_COMMIT

Se usar --name-status também irá incluir a alteração (adicionada, modificada, apagada, etc) ao lado de cada ficheiro

git diff --name-status START_COMMIT..END_COMMIT
 57
Author: lunohodov, 2015-06-21 07:25:13

Forma mais simples:

git show --stat (hash)

Isso é mais fácil de lembrar e dar-te-á toda a informação de que precisas.

Se realmente quiser apenas os nomes dos ficheiros, poderá adicionar a opção --name-only.

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

 49
Author: VaTo, 2016-08-17 04:11:51

Uso alterado com bastante frequência. Para a configurar:

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

Depois:

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)

Comandos semelhantes que podem ser úteis:

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

Usando o comando 'diff' padrão do git (também bom para programação):

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

Se você quiser também o estado dos arquivos alterados:

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

Isto funciona bem com os commits do merge.

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

Utilizar

git log --name-status

Isto mostrar-lhe-á o id de commit, a mensagem, os ficheiros alterados e se foi modificado, criado, adicionado ou apagado. Uma espécie de comando único.

 17
Author: alpha_989, 2018-05-15 16:42:35

Ok, existem algumas maneiras de mostrar todos os arquivos em um commit particular...

Para reduzir a informação e mostrar apenas os nomes dos ficheiros que foram enviados, pode simplesmente adicionar a opção --name-only ou --name-status..., estas opções apenas mostram os nomes dos arquivos que são diferentes dos commits anteriores como você quer...

Assim você pode fazer git diff seguido por --name-only, com dois commit hashes após <sha0> <sha1>, algo como abaixo:

git diff --name-only 5f12f15 kag9f02 

Também crio a imagem abaixo para mostrar tudo passos a percorrer nesta situação:

git diff --name-only 5f12f15 kag9f02

 16
Author: Alireza, 2017-12-07 02:27:25

Uso isto para obter uma lista de ficheiros modificados entre dois conjuntos de alterações:

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

Eu gosto de usar

git show --stat <SHA1>^..<SHA2>
 15
Author: Michael De Silva, 2010-11-03 08:12:26
git show --name-only commitCodeHere
 12
Author: George Oikonomou, 2016-01-12 13:47:31
Gosto disto.
git diff --name-status <SHA1> <SHA1>^
 11
Author: skiphoppy, 2009-08-12 18:17:31

Também há git whatchanged, que é mais baixo do que git log

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

Ele emite o resumo de commit com uma lista de ficheiros por baixo com os seus modos e se for Adicionado (A), eliminado (D) ou modificado(M);

$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363

Daria algo como:

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
...
Eu sei que esta resposta não corresponde a nenhuma informação estranha.", mas eu ainda acho que esta lista é mais útil do que apenas os nomes dos arquivos.
 11
Author: Koen., 2015-10-14 11:05:59

Use um comando simples de uma linha, se apenas quiser que a lista de ficheiros seja alterada na última persistência:

git diff HEAD~1 --name-only
 10
Author: Developer-Sid, 2014-05-18 22:34:44

Lista os ficheiros que foram alterados numa persistência:

git diff --name-only SHA1^ SHA1
Isto não mostra mensagens de Registo, novas linhas extra ou qualquer outra confusão. Isso funciona para qualquer commit, não apenas o atual. Não sei porque ainda não foi mencionado, por isso vou adicioná-lo.
 9
Author: Newtonx, 2012-07-28 00:55:26

Mostra o registo.

O COMMIT pode ser em branco ("") ou o sha-1 ou o sha-1 encurtado.

git log COMMIT -1 --name-only

Isto irá listar apenas os arquivos, muito útil para o processamento posterior.

git log COMMIT -1 --name-only --pretty=format:"" | grep "[^\s]"
 8
Author: thefreshteapot, 2015-06-09 10:17:41

Encontrei uma resposta perfeita para isto:

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

Para que eu possa saber

which files were just modified M

Which files were newly added , A

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

Uma combinação de "git show --stat" (obrigado Ryan) e alguns comandos sed devem reduzir os dados para ti:

git show --stat <SHA1> | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"
Isso irá produzir apenas a lista de arquivos modificados.
 6
Author: seanhodges, 2015-06-09 10:17:13

Existe um truque simples para ver como uma listagem de arquivos, basta adicionar : Depois do hash.

git show 9d3a52c474:

Depois podes perfurar,

git show 9d3a52c474:someDir/someOtherDir

Se você carregar num ficheiro, irá obter a versão raw do ficheiro; que, por vezes, é o que deseja se só estiver à procura de uma referência ou de pedaços de código (os diffs podem fazer com que tudo fique uma confusão), {[[6]}

git show 9d3a52c474:someDir/someOtherDir/somefile

A única desvantagem deste método é que ele não mostra facilmente uma árvore de arquivos.

 6
Author: srcspider, 2015-08-26 11:59:32
git show HEAD@{0}

Funciona bem para mim

 2
Author: Bruce, 2015-06-09 10:16:50
Pensei em partilhar um resumo do meu pseudónimo.. também acho que usar ' zsh ' ótimo com as teclas git it chroma tudo bem e diz que você quer branch está em todo o tempo, alterando o prompt de comando.

Para aqueles que cobrem a SVN você vai achar isto útil: (esta é uma combinação de ideias de diferentes tópicos, eu só aceito o crédito de saber como usar copy/paste)

.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 <[email protected]>
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 <[email protected]>
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
Author: Jim Zucker, 2015-12-02 17:40:27
Isto deve funcionar.
git status
Isto vai mostrar o que não é encenado e o que é encenado.
 -1
Author: 4067098, 2018-03-08 00:53:14