Estou procurando um git
comando simples que forneça uma lista bem formatada de todos os arquivos que fizeram parte do commit fornecido por um hash (SHA1), sem informações estranhas.
Eu tentei:
git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Embora liste os arquivos, também inclui informações diferenciais indesejadas para cada um.
Existe outro git
comando que fornecerá apenas a lista que eu quero, para evitar a análise da git show
saída?
git log --until 2013-05-21 --pretty="short" --name-only
com um bom efeito.n
confirmações anteriores atémaster
:git diff-tree --name-status -r @{3} master
git diff --name-only master
- Para listar TODOS os arquivos alterados na ramificação atual, comparando com a ramificação principal.Respostas:
Maneira preferida (porque é um comando de encanamento ; deve ser programático):
Outra maneira (menos preferida para scripts, porque é um comando de porcelana ; deve ser voltado para o usuário)
--no-commit-id
suprime a saída ID cometer.--pretty
argumento especifica uma cadeia de formatação vazia para evitar o problema no início.--name-only
argumento mostra apenas os nomes de arquivos que foram afetados (obrigado Hank). Use--name-status
em vez disso, se você quiser ver o que aconteceu com cada arquivo ( D eleted, M odificado, A dded)-r
argumento é recursar em subárvoresfonte
diff-tree
não funcionará ao analisar o commit raiz.--name-only
opção por--name-status
dará um resumo mais claro.git log --name-only -n 1 <hash>
O último commit seria:git log --name-only -n 1 HEAD~1..HEAD
git show
é "porcelana" (destinada a ser voltada para o usuário) egit diff-tree
é "canalização" (destinada a ser usada programaticamente, por exemplo, a partir de scripts). A interface para o primeiro pode mudar ao longo do tempo (para que os mantenedores do git possam cair,--name-only
embora eu não imagine que o faria ) por motivos de usabilidade, enquanto a interface para o último será mantida o mais estável possível por motivos de compatibilidade.Se você deseja obter uma lista dos arquivos alterados:
Se você deseja obter a lista de todos os arquivos em uma confirmação, pode usar
fonte
git ls-tree --name-only HEAD
(o <comprometer-ish> parâmetro é necessário , neste exemplo, é HEAD) funciona para mim com a versão git 1.6.4.3--no-commit-id
para evitar a impressão do SHA1, da seguinte maneira:git diff-tree --no-commit-id --name-only -r <commit-ish>
-r
/-t
opção, não? Porque o diff-tree lida com arquivos modificados e adicionados. Se você deseja listar todos os novos arquivos (adicionados), usegit diff-tree -r --name-only --no-commit-id --diff-filter=A <commit-ish>
Vou apenas assumir que
gitk
não é desejado para isso. Nesse caso, tentegit show --name-only <sha>
.fonte
--name-status
.gitk
é realmente uma maneira decente de revisar os arquivos e exibir o arquivo em que o diff está. por exemplo, código revisando um commit de monstro de um par.Eu pessoalmente uso a combinação de --stat e --oneline com o comando show :
Se você não gostar / desejar as estatísticas de adição / remoção, poderá substituir --stat por --name-only
fonte
alias gits='git show --stat --oneline'
então,gits
por si só, mostra as últimas alterações (em HEAD), enquantogits b24f5fb
pode ser usado para mostrar as alterações de qualquer revisão.git config --global alias.changes 'show --stat --oneline'
. Em seguida, você pode digitargit changes
(com um commit-ish opcional) e obter a saída dos primeiros exemplos acima.git config --global alias.changes "show --stat --oneline"
git show
também funciona para analisar mudanças escondidas: por exemplogit show --stat --oneline stash@{1}
Você também pode fazer
e você pode navegar por várias confirmações, confirmar mensagens e os arquivos alterados.
Digite q para receber seu prompt de volta.
fonte
git show 5944ad2a8b5 --name-only
para listar o nome de uma confirmação específicaRecentemente, eu precisava listar todos os arquivos alterados entre dois commits. Então eu usei este comando (também * nix específico)
Atualização : Ou como Ethan aponta abaixo
O uso
--name-status
também incluirá a alteração (adicionada, modificada, excluída etc.) ao lado de cada arquivofonte
git diff --name-status START_COMMIT..END_COMMIT
, não precisará do final|sort | uniq
.git diff --name-only START_COMMIT..END_COMMIT
git diff --name-only START_COMMIT..END_COMMIT | grep -v -e '**.png' -e '**.xml'
. Eu queria uma lista de alterações de código apenas para um enorme PR que adicionasse milhares de PNGs e layouts XML.Forma mais simples:
git show --stat (hash)
É mais fácil lembrar e fornecerá todas as informações necessárias.
Se você realmente quiser apenas os nomes dos arquivos, poderá adicionar a
--name-only
opção.git show --stat --name-only (hash)
fonte
Eu uso o alias alterado com bastante frequência. Para configurá-lo:
então:
Comandos semelhantes que podem ser úteis:
fonte
Usar
Isso mostrará o ID de confirmação, a mensagem, os arquivos alterados e se foram modificados, criados, adicionados ou excluídos. Um pouco de um comando all-in-one.
fonte
Usando o comando git diff padrão (também é bom para scripts):
Se você deseja também o status dos arquivos alterados:
Isso funciona bem com confirmações de mesclagem.
fonte
tente este comando para nome e altera o número de linha
mostrar apenas nomes de arquivo
para obter o último hash de confirmação, tente este comando
última confirmação com o nome do arquivo show e o status do arquivo modificar, criar ou excluir
ou para todos
para obter informações mais avançadas sobre o git log, leia este artigo
https://devhints.io/git-log-format
https://devhints.io/git-log
fonte
fonte
OK, existem algumas maneiras de mostrar todos os arquivos em um commit específico ...
Para reduzir as informações e mostrar apenas os nomes dos arquivos confirmados, basta adicionar
--name-only
ou--name-status
sinalizar ..., esses sinalizadores mostram apenas os nomes dos arquivos que são diferentes dos confirmados anteriormente, conforme desejado ...Então você pode fazer
git diff
seguido por--name-only
, com dois hashes de confirmação depois<sha0> <sha1>
, algo como abaixo:Também crio a imagem abaixo para mostrar todas as etapas a seguir nessas situações:
fonte
Eu uso isso para obter a lista de arquivos modificados entre dois conjuntos de alterações:
fonte
git diff --name-status .. | grep ^[^D] | cut -f2
Eu gosto de usar
fonte
Há também
git whatchanged
, que é um nível mais baixo do quegit log
Ele gera o resumo da confirmação com uma lista de arquivos abaixo, com seus modos e, se houver adicionado (
A
), excluído (D
) ou modificado (M
);Daria algo como:
Sei que essa resposta realmente não corresponde a "sem informações estranhas", mas ainda acho que essa lista é mais útil do que apenas os nomes de arquivos.
fonte
whatchanged
vez de fornecer parâmetros.Eu gosto disso:
fonte
A
&D
(adicionar e excluir) ao contrário, porque mostra o diff do commit especificado para o commit anterior, em vez do contrário. Deveria sergit diff --name-status <SHA1>^ <SHA1>
.Use o comando de uma linha simples, se você quiser que a lista de arquivos seja alterada na última confirmação:
fonte
Liste os arquivos que foram alterados em uma confirmação:
Isso não mostra mensagens de log, novas linhas extras ou qualquer outra confusão. Isso funciona para qualquer confirmação, não apenas para a atual. Não tenho certeza por que ele não bastante sido mencionado ainda, por isso estou adicionando-o.
fonte
git diff SHA1^ SHA1
egit show SHA1
.git show
também mostra a mensagem de commitExiba o log.
COMMIT pode ficar em branco ("") ou o sha-1 ou o sha-1 encurtado.
Isso listará apenas os arquivos, muito úteis para processamento adicional.
fonte
Encontrou uma resposta perfeita para isso:
Para que eu possa saber
fonte
Uma combinação de "
git show --stat
" (obrigado Ryan) e alguns comandos sed deve reduzir os dados para você:Isso produzirá apenas a lista de arquivos modificados.
fonte
Existe um truque simples para visualizar como uma lista de arquivos, basta adicionar
:
após o hash.Em seguida, você pode detalhar
Se você clicar em um arquivo, obterá a versão bruta do arquivo; que às vezes é o que você deseja se estiver procurando apenas uma boa referência ou trechos de código importantes (as diferenças podem tornar tudo uma bagunça),
A única desvantagem desse método é que ele não mostra facilmente uma árvore de arquivos.
fonte
funciona bem para mim
fonte
Eu uso isso para obter a lista de arquivos alterados na consolidação de mesclagem
ou
fonte
Se você estiver usando o plugin oh-my-zsh e git, o atalho glg é útil.
fonte
glg
resultados: muito mais. Desculpe pela confusão.Somente a lista de arquivos (nem mesmo confirmar a mensagem):
Por exemplo, abra todos os arquivos alterados no seu editor:
fonte
Eu pensei em compartilhar um resumo do meu apelido. Também acho que o uso do 'zsh' é ótimo com o git it chroma keys, tudo muito bem e informa que você deseja que o branch esteja o tempo todo, alterando o prompt de comando.
Para aqueles que abordam o SVN, você achará isso útil: (essa é uma combinação de idéias de diferentes threads, eu só me credito em saber como usar copiar / colar)
fonte
Isso deve funcionar:
Isso mostrará o que não está preparado e o que está preparado.
fonte