Como obter uma lista de todos os arquivos que foram alterados entre dois commit do Git?
178
Devido à burocracia, preciso obter uma lista de todos os arquivos alterados no meu repositório para um relatório (comecei com o código-fonte existente).
Para arquivos alterados entre um determinado SHA e seu commit atual:
git diff --name-only <starting SHA> HEAD
ou se você deseja incluir arquivos alterados, mas ainda não confirmados:
git diff --name-only <starting SHA>
De maneira mais geral, a sintaxe a seguir sempre informa quais arquivos foram alterados entre duas confirmações (especificadas por seus SHAs ou outros nomes):
e se você quiser saber os arquivos modificados para um determinado cometer fazer:git diff --name-only <SHA> <SHA>^
thebugfinder
3
Usar o --name-statussinalizador em vez de --name-onlyé útil para obter uma lista de arquivos e ver seu status de modificação, como Adicionado ou Modificado.
Thane Plummer
@Amber deve mencionar as notas de @Thane Plummer que --name-statusmostra o que aconteceu a eles
Zoltán Süle
64
Para encontrar os nomes de todos os arquivos modificados desde seu último commit:
git diff --name-only
Ou (para obter mais informações, incluindo arquivos não rastreados):
Para listar todos os arquivos não rastreados (os listados por git status, para não incluir nenhum arquivo ignorado):
git ls-files --other --exclude-standard
Se você estiver usando isso em um shell script, e você quer verificar programaticamente se estes comandos retornou nada, você vai estar interessado em git diff's --exit-codeopção.
Por que não usar xargse chamada única stat? O one-liner completo:git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
ruvim 15/11/19
@ruvim Obrigado. Muito boa sugestão. Eu editei a resposta para incluir seu comentário, para ter mais visibilidade.
VonC 15/11/19
4
Eu preciso de uma lista de arquivos que alteraram o conteúdo entre dois commits (adicionados ou modificados apenas), então usei:
filtro diff = [(A | C | D | M | R | T | U | X | B)… [*]]
Selecione apenas os arquivos adicionados (A), copiados (C), excluídos (D), modificados (M), renomeados (R), com o tipo (por exemplo, arquivo normal, link simbólico, submódulo, ...) alterado (T), não estão imersos (U), são desconhecidos (X) ou tiveram seu emparelhamento quebrado (B). Qualquer combinação dos caracteres de filtro (incluindo nenhum) pode ser usada. Quando * (Tudo ou nenhum) é adicionado à combinação, todos os caminhos são selecionados se houver algum arquivo que corresponda a outros critérios na comparação; se não houver arquivo que corresponda a outros critérios, nada será selecionado.
Além disso, essas letras maiúsculas podem ser excluídas para excluir. Por exemplo, --diff-filter = ad exclui caminhos adicionados e excluídos.
Se você deseja listar também o status (por exemplo, A / M), mude --name-onlypara --name-status.
Note que isso só pode ser utilizado para alterações unstaged, então ele não é útil para 'arquivos que mudou entre dois commits git'
John Vandenberg
2
Com git showvocê pode obter um resultado semelhante. Para consultar o commit (como parece na git logvisualização) com a lista de arquivos incluídos, use:
git show --name-only [commit-id_A]^..[commit-id_B]
Onde [commit-id_A]está o commit inicial e [commit-id_B]o último commit que você deseja mostrar.
Atenção especial com o ^símbolo. Se você não colocar isso, as informações de commit-id_A não serão implantadas.
Se você quiser verificar os arquivos alterados, precisará cuidar de muitas pequenas coisas, como qual será o melhor para usar, como se você quiser verificar quais arquivos foram alterados, apenas digite
status git - mostrará os arquivos com alterações
se você quiser saber quais alterações devem ser feitas, ele pode ser verificado de maneiras,
git diff - mostrará todas as alterações em todos os arquivos
só é bom quando apenas um arquivo é modificado
e se você quiser verificar um arquivo específico, use
Respostas:
Para arquivos alterados entre um determinado SHA e seu commit atual:
ou se você deseja incluir arquivos alterados, mas ainda não confirmados:
De maneira mais geral, a sintaxe a seguir sempre informa quais arquivos foram alterados entre duas confirmações (especificadas por seus SHAs ou outros nomes):
fonte
git diff --name-only <SHA> <SHA>^
--name-status
sinalizador em vez de--name-only
é útil para obter uma lista de arquivos e ver seu status de modificação, como Adicionado ou Modificado.--name-status
mostra o que aconteceu a elesPara encontrar os nomes de todos os arquivos modificados desde seu último commit:
Ou (para obter mais informações, incluindo arquivos não rastreados):
fonte
Para listar todos os arquivos alterados rastreados em estágios :
Para listar todos os arquivos alterados rastreados em estágios :
Para listar todos os arquivos alterados rastreados em estágios e não em estágios :
Para listar todos os arquivos não rastreados (os listados por
git status
, para não incluir nenhum arquivo ignorado):Se você estiver usando isso em um shell script, e você quer verificar programaticamente se estes comandos retornou nada, você vai estar interessado em
git diff
's--exit-code
opção.fonte
Quando adicionei / modifiquei / excluí muitos arquivos (desde a última confirmação), gosto de ver essas modificações em ordem cronológica.
Para isso eu uso:
Para listar todos os arquivos não faseados:
Para obter a data da última modificação de cada arquivo:
Embora ruvim sugira nos comentários :
Para classificá-los do mais antigo para o mais recente:
Um alias facilita o uso:
Ou (mais curto e mais eficiente, graças ao ruvim )
Por exemplo:
Agora posso revisar minhas modificações, da mais antiga para a mais recente.
fonte
xargs
e chamada únicastat
? O one-liner completo:git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
Eu preciso de uma lista de arquivos que alteraram o conteúdo entre dois commits (adicionados ou modificados apenas), então usei:
As diferentes opções de filtro diff da documentação do git diff :
Se você deseja listar também o status (por exemplo, A / M), mude
--name-only
para--name-status
.fonte
A lista de estágios modificados pode ser obtida usando
git status
ogrep
comando abaixo. Algo comogit status -s | grep M
:fonte
Com
git show
você pode obter um resultado semelhante. Para consultar o commit (como parece nagit log
visualização) com a lista de arquivos incluídos, use:Onde
[commit-id_A]
está o commit inicial e[commit-id_B]
o último commit que você deseja mostrar.Atenção especial com o
^
símbolo. Se você não colocar isso, as informações de commit-id_A não serão implantadas.fonte
Se você quiser verificar os arquivos alterados, precisará cuidar de muitas pequenas coisas, como qual será o melhor para usar, como se você quiser verificar quais arquivos foram alterados, apenas digite
status git - mostrará os arquivos com alterações
se você quiser saber quais alterações devem ser feitas, ele pode ser verificado de maneiras,
git diff - mostrará todas as alterações em todos os arquivos
só é bom quando apenas um arquivo é modificado
e se você quiser verificar um arquivo específico, use
git diff
fonte