O log do SVN possui um modo "-v" que gera nomes de arquivos alterados em cada confirmação, assim:
jes5199 $ svn log -v -------------------------------------------------- ---------------------- r1 jes5199 2007-01-03 14:39:41 -0800 (quarta-feira, 03 de janeiro de 2007) | 1 linha Caminhos alterados: A / AUTORES A / COPYING A / ChangeLog A / EVOLUTION A / INSTALAR A / MacOSX
Existe uma maneira rápida de obter uma lista de arquivos alterados em cada commit no git?
git log
que não suporta apenas um-v
switch como tantos esperam / querem? </gripe>Respostas:
Para nomes completos do caminho dos arquivos alterados:
Para nomes completos de caminhos e status de arquivos alterados:
Para nomes de caminho abreviados e uma diferença de arquivos alterados:
Há muito mais opções, confira os documentos .
fonte
git log --numstat
. Vejagit help log
para mais opções.git log --name-only --oneline
também é bastante interessante - uma linha colorida para o commit e um arquivo por linha. stackoverflow.com/a/14227496/1995714git log --name-status --find-renames
-lo para mostrar arquivos renomeados em vez de adição + exclusão.--stat
abrevia caminhos longos; a largura é configurável, mas os histogramas agrupados são mais difíceis de ler. Outros formatos, como--numstat
sempre, imprimem caminhos completos.--numstat
está na linha 946 dessa página de manual a partir do git 2.22.00. São muito mais opções do que a maioria das pessoas precisa.NOTA: está obsoleto, use em vez disso
git whatchanged
git log
Você pode usar o comando
git whatchanged --stat
para obter uma lista de arquivos que foram alterados em cada confirmação (junto com a mensagem de confirmação).Referências
fonte
git show
também é um ótimo comando.É meio que parecido
svn diff
, mas você pode passar um guia de confirmação e ver essa diferença.fonte
Se você deseja obter os nomes dos arquivos apenas sem o restante da mensagem de confirmação, pode usar:
Isso pode ser estendido para usar as várias opções que contêm o nome do arquivo:
Uma coisa a ser observada ao usar esse método é que existem algumas linhas em branco na saída que precisarão ser ignoradas. Usar isso pode ser útil se você quiser ver os arquivos que foram alterados em uma filial local, mas ainda não foram enviados para uma filial remota e não há garantia de que a última versão do controle remoto já tenha sido extraída. Por exemplo :
Mostraria todos os arquivos que foram alterados na ramificação local, mas ainda não foram mesclados à ramificação mestre no controle remoto.
fonte
git log --stat --pretty="format:" $branchName
,. Então, por exemplogit log --stat --pretty="format:" $(git rev-parse --abbrev-ref HEAD)
,. Enquanto estou nisso, aqui está o encantamento exata que acabou sendo relevante para o meu propósito:git log --name-only --pretty="format: " master..$(git rev-parse --abbrev-ref HEAD)
Eu uso isso diariamente para mostrar o histórico com arquivos que foram alterados:
Para mantê-lo breve, adicione um alias no seu
.gitconfig
, fazendo:fonte
Eu uso isso:
que gera apenas uma lista de arquivos e seus estados (adicionados, modificados e excluídos):
fonte
git diff --stat HEAD^!
mostra arquivos alterados e contagens de linhas adicionadas / removidas para o último commit (HEAD
).Parece-me que não há um comando único para obter uma saída concisa que consiste apenas em nomes de arquivos e contagens de linhas adicionadas e removidas para vários commits de uma só vez, então criei meu próprio script bash para isso:
Para ser chamado, por exemplo.
./changed_files 99
para obter as alterações de forma concisa deHEAD
paraHEAD~99
. Pode ser canalizado, por exemplo. paraless
.fonte
git diff --stat HEAD..master
mostrar a diferença entre HEAD e mestre, ou isso não existia quando você postou sua resposta em 2012?HEAD
emaster
. Essas são duas coisas diferentes.Acho que o seguinte é a exibição ideal para listar quais arquivos foram alterados por confirmação em um formato conciso:
fonte
Um resumo de respostas com exemplo de saída
Isso está usando um repositório local com cinco confirmações simples.
Créditos para @ CB-Bailey @ Peter-Suwara @Gaurav @ Omer-Dagan @xsor @Hazok @nrz @ptc
fonte
Outro comando útil seria
git diff-tree <hash>
onde o hash também pode ser um intervalo de hash (indicado por<old>..<new>
notação). Um exemplo de saída:Os campos são:
modo de origem, modo de destino, hash de origem, hash de destino, status, nome do arquivo
Status é o que você esperaria: D (excluído), A (adicionado), M (modificado) etc. Consulte a página do manual para obter uma descrição completa.
fonte
Eu geralmente os uso para obter os logs:
fonte