Existe uma maneira de fazer com que o git-reflog mostre uma data ao lado de cada entrada?

305

O comando git-reflog não mostra, por padrão, uma data ao lado de cada entrada, o que me parece uma supervisão estranha; Eu acho que isso seria muito útil.

Existem opções de linha de comando ou outros ajustes que podem ser empregadas para mostrar quando cada entrada de reflog foi adicionada? A página de manual não está disponível ...

Andrew Ferrier
fonte

Respostas:

453

Enquanto a página do manual escreve, você pode usar as opções para git log, digamos git reflog --pretty=shortou qualquer outra que desejar

experimentar

git reflog --date=iso
Balog Pal
fonte
11
Isso substitui o número do cabeçalho (ou qualquer que seja o termo correto) pela data. Você pode ter os dois?
Marco Eckstein
7
@Marco parece que você teria que usar um formato personalizado: git reflog --format='%C(auto)%h %<|(17)%gd %C(blue)%ci%C(reset) %s'. Eu adicionei um alias para isso: github.com/blueyed/dotfiles/commit/…
blueyed
1
@blueyed Não é o mesmo - o --date=isocomando reflog mostra quando essa entrada de reflog foi criada, não a hora da confirmação. Ainda aprecio seu apelido, pois eu o usei para criar um reflog mais bonito.
Johan Henkens
36

Você pode usar a --walk-reflogsvariante de git log:

git log -g

Isso é bastante detalhado por padrão e imprime a data entre outras coisas. Você pode formatá-lo com a --pretty=bandeira padrão .

Você também pode usar o comando reflog diretamente com o --pretty=sinalizador para formatar a saída.

git reflog --pretty='%cd %h %gd %gs'

No formato acima, %cdmostra a data de confirmação à esquerda da saída normal do reflog.

Klas Mellbourn
fonte
9
%cd, mostra a data da confirmação para a qual o reflog aponta, infelizmente, que não é o que eu (ou o OP) está buscando: queremos a data da entrada do reflog.
Thanatos
10
git log --walk-reflogs --date=isoapenas fez o meu dia
Alois Mahdal
7

Você precisa usar um formato personalizado:

git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)'

No formato acima, %hé o hash de confirmação, %cré a data relativa do commit , %gsé o assunto do reflog e, %sé o assunto do commit. Veja os documentos do git-log para outros possíveis espaços reservados. Por exemplo, usar em %civez de %crmostrará datas de confirmação absolutas.

Você pode salvar isso no seu ~ / .gitconfig usando um prettyformato personalizado e consultá-lo através de um alias:

[alias]
    rl = reflog --pretty=reflog
[pretty]
    reflog = %C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)
azulados
fonte
1
O problema com isso é que %gdnão mostra a mesma data @{now}. Ao pesquisar no reflog, saber a hora exata pode ser realmente importante ("Eu sei que estava no estado certo às 8:57", por exemplo).
ErikE
2
@ErikE - Basta alterar o crpara cipara obter o carimbo de data / hora completo de cada ação:git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%ci%C(reset) %gs (%s)'
n1k31t4
6

Informe gitem qual formato, reflogentradas contadas ou reflogentradas programadas , ou seja,

$ git reflog @{now}

$ git reflog @{0}
gitster
fonte
O programador em mim não gosta das datas da "linguagem natural" {}, mas felizmente essa técnica também funciona --date=iso.
Mwfearnley
5

Nota O git 2.10 (terceiro trimestre de 2016) aprimora a documentação sobre a data com git reflog.

Consulte commit 642833d , commit 1a2a1e8 (27 de julho de 2016) e commit d38c7b2 , commit 522259d , commit 83c9f95 , commit 2b68222 (22 jul 2016) por Jeff King ( peff) .
Ajudado por: Jeff King ( peff) .
(Mesclado por Junio ​​C Hamano - gitster- na confirmação 0d32799 , 08 de agosto de 2016)

As rev-listopções são atualizadas :

O designador de reflog na saída pode ser mostrado como ref@{Nth}(onde Nthestá o índice cronológico reverso no reflog) ou como ref@{timestamp}(com o registro de data e hora dessa entrada), dependendo de algumas regras.

Inclui : - uma atualização sobre --date=raw:

mostra a data como segundos desde a época (1970-01-01 00:00:00 UTC), seguida de um espaço e, em seguida, o fuso horário como um deslocamento do UTC (a +ou -com quatro dígitos; os dois primeiros são horas e os dois segundos são minutos).
Ou seja, como se o carimbo de data / hora estivesse formatado com strftime("%s %z")).
Observe que a -localopção não afeta o seconds-since-epoch valor (que é sempre medido em UTC), mas altera o valor do fuso horário que o acompanha.

E uma nova opção: --date=unix

mostra a data como um registro de data e hora da época do Unix (segundos desde 1970).
Assim como --rawsempre, isso está no UTC e, portanto -local, não tem efeito.

VonC
fonte