Como gerar o git log apenas com a primeira linha?


330

Estou tentando personalizar o formato para git log. Quero que todos os commits sejam mostrados em uma linha. Cada linha deve mostrar apenas a primeira linha da mensagem de confirmação.
Eu descobri que isso git log --pretty=shortdeveria funcionar, mas no meu computador ele mostra o log completo como git logfaz (além do registro de data e hora).

Além disso, tentei usar os espaços reservados, conforme definido na página do manual . No entanto, não foi possível encontrar um comando para reduzir a mensagem de log. Eu tentei esta linha git log --pretty=format:'%h : %s'que mostra o hash em curto %he a mensagem completa %sem uma linha.

Eu estou usando git version 1.7.3.1.msysgit.0no Vista.


Talvez tenha algo a ver com a maneira como escrevo minhas mensagens de confirmação. Aqui está um exemplo:

Added some functionality.
+ Added print function in Foo class.
+ Added conversion from foo to baz.

Portanto, com o exemplo dado, eu só quero que a saída seja Added some functionality.anexada pelo hash de shortend.


1
%sé o assunto, não a mensagem completa.
Josh Lee

É realmente difícil dizer o que você realmente quer. O shortformato não está todo em uma linha, no entanto (surpresa!) oneline. Se onelinee %h : %snão é o que você quer, o que há de errado com eles? Em particular, %sé o assunto, a primeira linha da mensagem de confirmação. Essa deve realmente ser uma versão abreviada. É possível que você esteja fazendo confirmações com uma única linha longa para a mensagem e visualizando-as de alguma forma com quebra de linha?
Cascabel

Você entende totalmente. O problema é esse onelinee %snão gera o que esperamos, pelo menos no meu computador. Atualizei minha postagem com um exemplo da minha mensagem de confirmação. Talvez ajude.
perfil completo de JJD

Respostas:


544

Você já tentou isso?

git log --pretty=oneline --abbrev-commit

O problema é provavelmente que está faltando uma linha vazia após a primeira linha. O comando acima geralmente funciona para mim, mas eu apenas testei em um commit sem a segunda linha vazia. Obtive o mesmo resultado que você: a mensagem inteira em uma linha.

A segunda linha vazia é um padrão nas mensagens de confirmação do git. O comportamento que você vê provavelmente foi implementado de propósito.

A primeira linha de uma mensagem de confirmação deve ser uma descrição curta. Se você não pode fazer isso em uma única linha, pode usar várias, mas o git considera tudo antes da primeira linha vazia como a "descrição resumida". onelineimprime toda a descrição curta, para todas as suas 3 linhas.


Obrigado! Você resolveu o mistério: não tenho uma linha vazia após a primeira linha na minha mensagem de confirmação para separar o assunto do resto. No entanto, seria bom se eu estivesse livre para colocá-lo ou deixá-lo de fora.
JJD

1
Sem problemas. De fato, você é livre para ter a linha vazia ou não. Só que toda a sua mensagem se torna curta se você a deixar de fora. Gosto dessa descrição curta / descrição detalhada e suponho que estar limitado a uma linha para a descrição curta fosse um problema, daí o requisito de linha vazia. Você sempre pode canalizar a saída git logpara um script de filtragem, mas eu realmente recomendaria escrever uma descrição curta com linha vazia.
Gauthier

89
Há também git log --oneline --oneline é uma abreviação incorporada para "--pretty = oneline --abbrev-commit" usado juntos.
Jeremy Logan

como você se livra da hashtag encurtada anexada? Não que não seja bonito demais. Mas sem cut. Isso seria um problema awk... (BTW math P: quais são as chances de o próximo bit em uma sequência de huffman adequadamente codificada, no nível de armazenamento, estar
ativada

7
foi isso tx. Também tenho uma página cheia de s, então naturalmente adicionei um %para '%s'. C-;
Phlip 17/07

158

Faz o git log --onelineque você quer?


1
Não quero que toda a mensagem de confirmação seja mesclada em uma linha. Quero ver apenas a primeira linha de cada mensagem de confirmação.
JJD

41

Melhor e mais fácil log git, criando um alias . Cole o código abaixo no terminal apenas uma vez para uma sessão. Cole o código no perfil zshrc ou bash para torná-lo persistente.

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

Resultado

git lg

Linhas alteradas de saída

git lg -p

Como alternativa (recomendado)
cole esse código no arquivo .gitconfig global

[alias]
  lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Leitura adicional.
https://coderwall.com/p/euwpig/a-better-git-log
Leitura avançada.
http://durdn.com/blog/2012/11/22/must-have-git-aliases-advanced-examples/


O exemplo é uma boa demonstração de pretty-formato, mas "Cole o código abaixo ao terminal apenas uma vez" parece errado, porque não criar um alias para "git lg"
Drone2537

observação para outras pessoas, se você colocar esse comando em lote, substitua% por %%, substitua 'por "". resultado = git log --color --graph --pretty=format:"%%Cred%%h%%Creset -%%C(yellow)%%d%%Creset %%s %%Cgreen(%%cr) %%C(bold blue)<%%an>%%Creset" --abbrev-commit %1. Você pode passar -p para esse arquivo bat para obter as linhas alteradas também
Dheeraj Bhaskar 29/03


25

Você pode definir um alias global para chamar um log curto de uma maneira mais confortável:

git config --global alias.slog "log --pretty=oneline --abbrev-commit"

Em seguida, você pode chamá-lo usando git slog(ele até funciona com preenchimento automático, se você o tiver ativado).


8

Sem mensagens de confirmação, apenas o hash:

git log --pretty=oneline | awk '{print $1}'

7
Se você quiser apenas o hash de ...git log --pretty=format:"%H"
michael_j_ward

Se você deseja apenas o hash, também pode usar git rev-list HEAD.
Fabio diz Reinstate Monica

-8

Se você quiser sempre usar git logdessa maneira, poderá adicionar o alias do git

git config --global alias.log log --oneline

depois disso git log, imprimirá o que normalmente seria impresso porgit log --oneline


12
Na verdade, isso não funciona, porque (os aliases do A. git não podem substituir os nomes de comandos internos) e (B. Precisa haver aspas "log --oneline").
Max Nanasy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.