A saída mais curta possível do log git contendo autor e data

465

Como posso mostrar uma saída de log git com (pelo menos) esta informação:

* author
* commit date
* change

Quero compactado para uma linha por entrada de log. Qual é o formato mais curto possível para isso?

(tentei, --format=onelinemas isso não mostra a data)

Jesper Rønn-Jensen
fonte
2
Talvez você como minha versão colorida: stackoverflow.com/a/49534733/2292766
Hannes Schneidermayer

Respostas:

699

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

fez o trabalho. Isso gera:

  fbc3503 mads    Thu Dec 4 07:43:27 2008 +0000   show mobile if phone is null...   
  ec36490 jesper  Wed Nov 26 05:41:37 2008 +0000  Cleanup after [942]: Using timezon
  ae62afd tobias  Tue Nov 25 21:42:55 2008 +0000  Fixed #67 by adding time zone supp
  164be7e mads    Tue Nov 25 19:56:43 2008 +0000  fixed tests, and a 'unending appoi
  93f1526 jesper  Tue Nov 25 09:45:56 2008 +0000  adding time.ZONE.now as time zone 
  2f0f8c1 tobias  Tue Nov 25 03:07:02 2008 +0000  Timezone configured in environment
  a33c1dc jesper  Tue Nov 25 01:26:18 2008 +0000  updated to most recent will_pagina

Inspirado pela pergunta stackoverflow: "saída do log git como svn ls -v" , descobri que era possível adicionar os parâmetros exatamente necessários.

Para encurtar a data (não mostrando a hora), use --date=short

Caso você esteja curioso para saber quais são as diferentes opções:
%h= abreviado commit hash
%x09= tab (caractere para o código 9)
%an= nome do
%adautor = data do autor (o formato respeita - data = opção)
%s= assunto
De kernel.org/pub/software/scm /git/docs/git-log.html (seção FORMATOS BONITOS) pelo comentário do Vivek.

Jesper Rønn-Jensen
fonte
6
... e também é útil adicionar date=shortsugestões sugeridas por cdunn2001 em outra resposta
Jesper Rønn-Jensen
10
Meu oneliner favorito (curto) agora é trocar a data antes do autor e usar a data curta:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Jesper Rønn-Jensen
143
Combiná-lo com a cor e também mostrar refs:git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
Kynan
16
Tabela de colunas de largura fixa:alias glop="git log --pretty=format:'%C(yellow)%h|%Cred%ad|%Cblue%an|%Cgreen%d %Creset%s' --date=short | column -ts'|' | less -r"
Ciro Santilli
15
Caso você esteja curioso para saber quais são as diferentes opções:% h = hash de confirmação abreviado,% x09 = tab (caractere para o código 9),% an = nome do autor,% ad = data do autor (o formato respeita --date = opção), % s = sujeito. De kernel.org/pub/software/scm/git/docs/git-log.html (seção FORMATOS BONITOS)
Vivek
204

Eu uso essas duas configurações .gitconfig:

[log]
  date = relative
[format]
  pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset

% ad é a data do autor, a qual pode ser substituída --dateou a opção especificada na sub-rotina [log] em .gitconfig. Gosto da data relativa, porque dá uma sensação imediata de quando as coisas foram enviadas. A saída é assim:

6c3e1a2 2 hours ago [email protected] lsof is a dependency now.
0754f18 11 hours ago [email protected] Properly unmount, so detaching works.
336a3ac 13 hours ago [email protected] Show ami registration command if auto register fails
be2ad45 17 hours ago [email protected] Fixes #6. Sao Paolo region is included as well.
5aed68e 17 hours ago [email protected] Shorten while loops

É claro que tudo é colorido, portanto é fácil distinguir as várias partes de uma linha de log. Também é o padrão ao digitar git logdevido à seção [formato].

ATUALIZAÇÃO DE 2014: Como o git agora oferece suporte ao preenchimento, tenho uma boa alteração na versão acima:

pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s

Este direito alinha as datas relativas e o esquerdo alinha os nomes dos autores, o que significa que você terá uma aparência de coluna fácil de ver.

Captura de tela

  ss # 1

ATUALIZAÇÃO 2016: Como a assinatura de confirmação do GPG está se tornando uma coisa, pensei em atualizar esta postagem com uma versão que inclui a verificação de assinatura (na captura de tela é a carta magenta logo após o envio). Uma breve explicação da bandeira:

% G ?: mostre "G" para uma boa assinatura (válida), "B" para uma assinatura ruim, "U" para uma boa assinatura com validade desconhecida e "N" para nenhuma assinatura

Outras mudanças incluem:

  • agora as cores são removidas se a saída for para algo diferente de tty (o que é útil para grepping etc.)
  • git log -g agora contém o seletor de reflog.
  • Salve 2 parênteses em refnames e coloque-os no final (para preservar o alinhamento da coluna)
  • Truncar datas relativas se elas forem muito longas (por exemplo 3 years, 4..)
  • Truncar nomes de commiter (pode ser um pouco curto para algumas pessoas, basta alterar %<(7,trunc)ou verificar o recurso gmail .mailmap para encurtar nomes de commiter )

Aqui está a configuração:

pretty = format:%C(auto,yellow)%h%C(auto,magenta)% G? %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(7,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D

No geral, o alinhamento das colunas agora é preservado muito melhor às custas de alguns caracteres (espero) inúteis. Sinta-se à vontade para editar se você tiver alguma melhoria, eu adoraria fazer com que a cor da mensagem dependa se um commit é assinado, mas não parece que isso seja possível.

Captura de tela

Captura de tela do log do git

andsens
fonte
3
Você pode reduzir ainda mais as linhas usando um mailmap .
Abreviei
2
As respostas no formato --pretty são boas, e a tigresposta fornece interatividade sem a configuração necessária, mas essa é brilhante - fornece a saída de uma linha solicitada (com cor para inicializar!) Usando o comando padrão 'git log'. Muito agradável.
Brent Faust
Ao usar - à direita, não recebo mais as > <marcas. Tentei adicionar %mao formato, mas depois >aparece sempre, mesmo para um normal git log. Alguma pista de como as marcas se comportam normalmente com o formato?
Vituel 18/03/16
1
@AlvaroCavalcanti com certeza não há problema! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens
2
@ TrầnViệtHoàng --onelineé apenas um apelido para --pretty=oneline. format.prettyé o formato bonito padrão, mas não há como substituir o format.onelineaaik. O que eu faria é omitir a pretty = shortloglinha na configuração e criar um alias para execução git log --pretty=shortlog.
andsens 16/10
99
git log --pretty=format:"%H %an %ad"

use --date=para definir um formato de data

git log --pretty=format:"%H %an %ad" --date=short
knittl
fonte
1
Ótimo! Da próxima vez eu provavelmente só vai usar% h sobre% H como o hash é apenas um disparate para os meus olhos humanos :)
Jesper Rønn-Jensen
como quiser. i deu apenas um exemplo simples;)
knittl
2
Legal! Eu não estava ciente de --date = short
Jesper Rønn-Jensen
3
Apenas lançando isso lá fora (oito anos atrasado): o hash pode parecer um absurdo, mas é uma ferramenta útil se você quiser escolher ou comparar os commits. Muitas vezes você listar o hash não porque tem significado, mas porque tem uso
stevendesu
81

Sinta-se livre para usar este:

git log --pretty="%C(Yellow)%h  %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s" -7

Observe o -7no final, para mostrar apenas as últimas 7 entradas.

Veja:

insira a descrição da imagem aqui

Hannes Schneidermayer
fonte
3
--date=shortpode ser adicionado para torná-lo mais curto.
xuhdev 28/09/19
@ Hannes, onde estão os nomes das filiais?
Pacerier
O @Pacerier git logsempre mostra o histórico da ramificação com check-out no momento.
Hannes Schneidermayer
Adicione %dpara restaurar "nomes de referência" como (HEAD -> master).
2540625
Por que usar em resetvez de auto?
2540625
49

tig é uma alternativa possível ao uso do comando git log , disponível nas principais distribuições de código aberto * nix.

No debian ou no ubuntu, tente instalar e executar da seguinte maneira:

$ sudo apt-get install tig

(tig é instalado)

$ tig

(o log é exibido no pager da seguinte forma, com o hash do commit atual exibido na parte inferior)

2010-03-17 01:07 ndesigner      changes to sponsors list
2010-03-17 00:19 rcoder         Raise 404 when an invalid year is specified.
2010-03-17 00:06 rcoder         Sponsors page now shows sponsors' level.
-------------------------- skip some lines ---------------------------------
[main] 531f35e925f53adeb2146dcfc9c6a6ef24e93619 - commit 1 of 32 (100%)

Como o markdown não suporta a coloração de texto, imagine: coluna 1: azul; coluna 2: verde; coluna 3: cor do texto padrão. Última linha, destacada. Pressione Q ou q para sair.


tigjustifica as colunas sem arestas irregulares , que uma guia ascii (% x09) não garante.

Para um formato de data curto, pressione maiúscula D (nota: d em minúscula abre uma visualização diferencial). Configure-o permanentemente adicionando show-date = shorta ~ / .tigrc; ou em uma [tig]seção em .git / configure ou ~ / .gitconfig.

Para ver uma alteração inteira :

  • pressione Enter . Um subpainel será aberto na metade inferior da janela.
  • use as teclas k , j para rolar a alteração no subpainel.
  • ao mesmo tempo, use as teclas para cima e para baixo para passar de confirmação para confirmação.

Como o tig é separado do git e aparentemente * nix específico, provavelmente é necessário que o cygwin seja instalado no Windows. Mas para fedora Acredito que os comandos instalar são $ su, (enter root password), # yum install tig. Para FreeBSD tentativa % su, (enter root password), # pkg_add -r tig.


A propósito, o tig é bom para muito mais do que uma visualização rápida do log: Screenshots & Manual

Joe Generic
fonte
forneça um exemplo completo. Escrever tigno meu console simplesmente me dá um erro-bash: tig: command not found
Jesper Rønn-Jensen
10
Uau. esta ferramenta é fantástica e surpreendentemente rápida! brew install tig
tourada
se você usa mac, brew install tig
Pedro Brasileiro
1
no Windows, os usuários babun podempact install tig
obojdi
34
git log --pretty=format:'%h %ad %s (%an)' --date=short  

ou

git log --pretty=format:'%h %ad %s | %an' --date=short  

... consultando a resposta do cdunn2001 acima: eu perderia o e-mail do autor e incluiria apenas o nome do autor, conforme Jesper e knittl, mas de acordo com a ideia do cdunn2001 de manter a saída em colunas de largura constante para facilitar a leitura ( boa ideia!). No lugar de uma coluna justificada à esquerda separada para o nome do autor, no entanto, coloco esse sinalizador no final do comando entre parênteses ou o desloco com um pipe. (Pode realmente ser qualquer caractere que sirva como ajuda visual na leitura da saída ... embora faça sentido evitar barras invertidas ou anteriores para reduzir a confusão da saída com um diretório ou algo assim.)

Saída de amostra:

6fdd155 2015-08-10 Fixes casting error in doSave | John Doe
c4f4032 2015-08-10 Fix for IE save. Add help button. | Jane
29a24a6 2015-08-10 Fixes bug in Course | Mac
Sean
fonte
31

Use alias predefinido do git, ou seja:

$ git work

Criado uma vez por comando:

$ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"'

https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases

Ou mais colorido com gráfico:

$ git config --global alias.work 'log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all'

insira a descrição da imagem aqui

Míra
fonte
Sim, eu gosto deste!
Alex
8
git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

Resultado:

e17bae5 2011-09-30  Integrate from development -> main      [email protected]
eaead2c 2011-09-30  More stuff that is not worth mentioning [email protected]
eb6a336 2011-09-22  Merge branch 'freebase' into development        [email protected]

Material de largura constante é o primeiro. A parte menos importante - o domínio do email - é a última e fácil de filtrar.

cdunn2001
fonte
4

Para mostrar os commits que realizei e que estão prontos para enviar,

git log remotes/trunk~4..HEAD --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" --date=short | awk -F'\t' '{gsub(/[, ]/,"",$2);gsub(/HEAD/, "\033[1;36mH\033[00m",$2);gsub(/master/, "\033[1;32mm\033[00m",$2);gsub(/trunk/, "\033[1;31mt\033[00m",$2);print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' | less -eiFRXS

A saída se parece com:

ef87da7 2013-01-17 haslers      (Hm)Fix NPE in Frobble
8f6d80f 2013-01-17 haslers      Refactor Frobble
815813b 2013-01-17 haslers      (t)Add Wibble to Frobble
3616373 2013-01-17 haslers      Add Foo to Frobble
3b5ccf0 2013-01-17 haslers      Add Bar to Frobble
a1db9ef 2013-01-17 haslers      Add Frobble Widget

Onde a primeira coluna aparece em amarelo, e o 'H' 'm' e 't' em parentese mostram a CABEÇA, o mestre e o tronco e aparecem nas cores "--decorate" usuais

Aqui está com quebras de linha para que você possa ver o que está fazendo:

git log remotes/trunk~4..HEAD --date=short
    --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s"
    | awk -F'\t' '{
         gsub(/[, ]/,"",$2);
         gsub(/HEAD/, "\033[1;36mH\033[00m",$2);
         gsub(/master/, "\033[1;32mm\033[00m",$2);
         gsub(/trunk/, "\033[1;31mt\033[00m",$2);
         print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}'

Eu aliasse para "encenado" com:

git config alias.staged '!git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F"\t" "{gsub(/[, ]/,\"\",\$2);gsub(/HEAD/, \"\033[1;36mH\033[00m\",\$2);gsub(/master/, \"\033[1;32mm\033[00m\",\$2);gsub(/trunk/, \"\033[1;31mt\033[00m\",\$2);print \$1 \"\t\" gensub(/([\(\)])/, \"\033[0;33m\\\\\1\033[00m\",\"g\",\$2) \$3}"'

(Existe uma maneira mais fácil de escapar disso? Foi um pouco complicado descobrir o que precisava ser escapado)

Sam Hasler
fonte
Minha versão atual desse script é ~ 300LOC e faz muito mais: ¶ - opção para alternar a mensagem de confirmação on-line / multilinhas¶ - mostra o espaço em branco da linha / linha termina no modo on-line. por exemplo: ¶ - especificar o intervalo via param¶ - Destaque edição # 's¶ - destaque / ^ - (Fix | Add | Refactor) / em cometer messages¶
Sam Hasler
Para aspas robustas e automatizadas, consulte esta resposta . Gostaria de compartilhar seu ~ 300LOC em uma essência?
Tom Hale
Obrigado Tom! se eu começar a postar esse script (eu precisaria remover algumas informações confidenciais / específicas da empresa), enviarei um ping aqui.
Sam Hasler
1

Todas as sugestões acima mencionadas usam %sespaço reservado para o assunto. Eu recomendo usar %Bporque a %sformatação preserva novas linhas e a mensagem de confirmação de várias linhas aparece achatada.

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"
palik
fonte
0

Execute isso na pasta do projeto:

$ git log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all

E se quiser, adicione esta linha ao seu ~ / .gitconfig:

[alias]
    ...
    list = log --pretty=format:\"%C(yellow)%h %ar %C(auto)%d %Creset %s, %Cblue%cn\" --graph --all
MUH Mobile Inc.
fonte
0

Tente o git log --pretty = fuller, ele mostrará: - Autor: Data do autor: Confirmar: Data de confirmação:

Espero que isto ajude.

Varun Sharma
fonte