logging integração - Como fazer com que git log mostre nomes de arquivos como svn log -v





how to (7)


Se você deseja obter os nomes dos arquivos apenas sem o resto da mensagem de confirmação, você pode usar:

git log --name-only --pretty=format: <branch name>

Isso pode ser estendido para usar as várias opções que contêm o nome do arquivo:

git log --name-status --pretty=format: <branch name>

git log --stat --pretty=format: <branch name>

Uma coisa a notar ao usar este método é que existem algumas linhas em branco na saída que terão que ser ignoradas. Usar isso pode ser útil se você quiser ver os arquivos que foram alterados em uma ramificação local, mas ainda não foi enviado para uma ramificação remota e não há garantia de que o mais recente do controle remoto já tenha sido enviado. Por exemplo, :

git log --name-only --pretty=format: my_local_branch --not origin/master

Mostraria todos os arquivos que foram alterados na ramificação local, mas ainda não foram mesclados à ramificação principal no controle remoto.

O log do SVN possui um modo "-v" que gera nomes de arquivos alterados em cada commit, assim:

jes5199$ svn log -v
------------------------------------------------------------------------
r1 |   jes5199 | 2007-01-03 14:39:41 -0800 (Wed, 03 Jan 2007) | 1 line
Changed paths:
   A /AUTHORS
   A /COPYING
   A /ChangeLog
   A /EVOLUTION
   A /INSTALL
   A /MacOSX

Existe uma maneira rápida de obter uma lista de arquivos alterados em cada commit no git?




NOTA: git whatchanged é obsoleto, use git log

Novos usuários são encorajados a usar o git-log [1] . O comando whatchanged é essencialmente o mesmo que git-log [1], mas o padrão é mostrar a saída do diff do formato raw e pular as mesclagens.

O comando é mantido principalmente por razões históricas; Os dedos de muitas pessoas que aprenderam o Git muito antes de o git log ser inventado pela leitura da lista de discussão do kernel Linux foram treinados para digitá-lo.

Você pode usar o comando git whatchanged --stat para obter uma lista de arquivos que foram alterados em cada commit (junto com a mensagem de commit).

Referências




Eu uso isso:

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq

que gera uma lista de arquivos apenas e seu estado (adicionado, modificado, excluído):

A   sites/api/branding/__init__.py
M   sites/api/branding/wtv/mod.py
...



git show também é um ótimo comando.

É como o svn diff , mas você pode passar um commit guid e ver esse diff.




git diff --stat HEAD^! mostra arquivos alterados e contagens de linhas adicionadas / removidas para o último commit ( HEAD ).

Parece-me que não existe um único comando para obter uma saída concisa consistindo apenas em nomes de arquivos e contagens de linhas adicionadas e removidas para vários commits de uma vez, então eu criei meu próprio script bash para isso:

#!/bin/bash
for ((i=0; i<=$1; i++))
do
    sha1=`git log -1 --skip=$i --pretty=format:%H`
    echo "HEAD~$i $sha1"
    git diff --stat HEAD~$(($i+1)) HEAD~$i 
done

Para ser chamado por exemplo. ./changed_files 99 para obter as alterações em um formato conciso de HEAD para HEAD~99 . Pode ser canalizado, por exemplo. para less .




Eu uso isso diariamente para mostrar o histórico com arquivos que foram alterados:

git log --stat --pretty=short --graph

Para .gitconfig , adicione um apelido no seu .gitconfig fazendo:

git config --global alias.ls 'log --stat --pretty=short --graph'



Um lifehack para tal situação eu apenas inventei e tentei (isso funciona perfeitamente):

git add .
git reset --hard HEAD

Cuidado! Certifique-se de confirmar todas as alterações necessárias (mesmo em arquivos não não-rastreados) antes de fazer isso .







svn git logging