Existe alguma maneira fácil de calcular o número de linhas alteradas entre dois commits no git?
Eu sei que posso fazer um git diff
e contar as linhas, mas isso parece entediante. Eu também gostaria de saber como fazer isso, incluindo apenas meus próprios commits nas contas de linha.
Respostas:
Você deseja a
--stat
opçãogit diff
ou, se estiver procurando analisar isso em um script, a--numstat
opção.--stat
produz a saída legível por humanos que você está acostumado a ver após mesclagens;--numstat
produz um bom layout de tabela que os scripts podem interpretar facilmente.De alguma forma, senti falta de que você estava procurando fazer isso em vários commits ao mesmo tempo - essa é uma tarefa
git log
. Ron DeVera aborda isso, mas você pode realmente fazer muito mais do que o que ele menciona. Comogit log
chama internamente o equipamento diff para imprimir as informações solicitadas, você pode fornecer qualquer uma das opções de stat diff - não apenas--shortstat
. O que você provavelmente deseja usar é:mas você pode usar
--numstat
ou--shortstat
também.git log
também é possível selecionar confirmações de várias outras maneiras - consulte a documentação . Você pode estar interessado em coisas como--since
(em vez de especificar intervalos de confirmação, basta selecionar confirmações desde a semana passada) e--no-merges
(confirmações de mesclagem não introduzem alterações), bem como as opções de saída bastante interessantes (--pretty=oneline, short, medium, full...
).Aqui está uma lista para obter o total de alterações em vez das alterações por confirmação do git log (altere as opções de seleção de confirmação conforme desejado - isso é confirmado por você, de commit1 para commit2):
(você precisa deixar o git log imprimir algumas informações de identificação sobre o commit; eu escolhi arbitrariamente o hash e depois usei o awk para escolher apenas as linhas com três campos, que são os que contêm as informações estatísticas)
fonte
git diff --shortstat <commit1> <commit2>
era o que eu queria.--since
e--until
é algo como:yesterday
,1 month 2 weeks 3 days 1 hour 1 second ago
ou1979-02-26 18:30:00
<commit-ish>
- ela funciona com qualquer coisa que represente uma confirmação, incluindo confirmações literais, ramificações, tags e refs em geral. Veja também stackoverflow.com/questions/23303549/…Para os preguiçosos, use
git log --stat
.fonte
-10
para mostrar os dez commits anteriores.Q
para retornar ao terminal.fornece apenas o número de linhas alteradas e adicionadas. Isso funciona apenas com alterações não faseadas. Para comparar com uma ramificação:
fonte
git add
, certifique-se de fazergit diff --shortstat --cached
EDIT: Você também deve especificar os commit (sem parâmetros, ele compara o diretório de trabalho com o índice). Por exemplo
comparar o pai de
HEAD
comHEAD
.fonte
diff-index
- odiff
frontend pode lidar com tudo; o caso dediff-index
é coberto pelo--cached/--staged
, eu acredito. (E não há nenhuma maneira de usardiff-index
para comparar dois commits arbitrárias como o OP perguntou.)git diff --stat HEAD
HEAD~n
, onden
é o quão longe você deseja voltar.git diff --stat HEAD~5 HEAD
mostrará estatísticas combinadas dos últimos 5 commits em relação ao HEAD.Supondo que você queira comparar todas as suas confirmações entre abcd123 (a primeira confirmação) e wxyz789 (a última confirmação), inclusive:
Isso fornece resultados sucintos como:
fonte
--shortstat
bandeira é incrível, mas funciona comgit diff
(nãogit log
).Outra maneira de obter todo o log de alterações em um período especificado
Resultado:
Com um conteúdo de saída longo, você pode exportar para um arquivo para facilitar a leitura
fonte
Embora todas as respostas acima estejam corretas, abaixo de uma é útil se você precisar contar os últimos muitos commits
abaixo de um é obter a contagem dos últimos 5 commits
git diff $(git log -5 --pretty=format:"%h" | tail -1) --shortstat
para contar os últimos 10 commits
git diff $(git log -10 --pretty=format:"%h" | tail -1) --shortstat
genérico - altere N com a contagem dos últimos commits necessários
git diff $(git log -N --pretty=format:"%h" | tail -1) --shortstat
para contar todos os commits desde o início
git diff $(git log --pretty=format:"%h" | tail -1) --shortstat
fonte
git log --numstat fornece apenas os números
fonte
Acabei de resolver esse problema por conta própria, então vou compartilhar o que descobri. Aqui está o resultado final:
O comando subjacente é assim:
Observe o
$@
comando no log para transmitir seus argumentos como--author="Brian"
ou--since=yesterday
.Escapar do awk para colocá-lo em um alias do git era confuso; portanto, coloquei-o em um script executável no meu caminho (
~/bin/git-stat-sum
), depois usei o script no alias do meu.gitconfig
:E funciona muito bem. Uma última coisa a observar é que
file changes
é o número de alterações nos arquivos, não o número de arquivos exclusivos alterados. Era isso que eu estava procurando, mas pode não ser o que você espera.Aqui está outro exemplo ou dois
Realmente, você poderá substituir qualquer
git log
comando porgit summary
.fonte