L'output più breve possibile dal registro git contenente autore e data


Risposte:


700

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

fatto il lavoro. Questo produce:

  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

Ispirato alla domanda di StackOverflow: "git log output like svn ls -v" , ho scoperto che potevo aggiungere i parametri esatti di cui avevo bisogno.

Per abbreviare la data (non mostrare l'ora) utilizzare --date=short

Nel caso fossi curioso di sapere quali fossero le diverse opzioni:
%h= abbreviato commit hash
%x09= tab (carattere per il codice 9)
%an= nome
%addell'autore = data dell'autore (il formato rispetta - data = opzione)
%s= soggetto
da kernel.org/pub/software/scm /git/docs/git-log.html (sezione FORMATI GRAZIOSI ) per commento di Vivek.


6
... ed è anche utile aggiungere date=shortcome suggerisce cdunn2001 in un'altra risposta
Jesper Rønn-Jensen,

10
Il mio preferito (breve) oneliner è ora di scambiare la data prima dell'autore e usare la breve data:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Jesper Rønn-Jensen,

143
git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
Ravviva il

16
Tabella colonne a larghezza fissa: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
Nel caso fossi curioso di sapere quali fossero le diverse opzioni:% h = hash commit abbreviato,% x09 = tab (carattere per il codice 9),% an = nome autore,% ad = data autore (formato rispetta - data = opzione), % s = soggetto. Da kernel.org/pub/software/scm/git/docs/git-log.html (sezione FORMATI GRAZIOSI )
Vivek,

204

Uso queste due impostazioni .gitconfig:

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

% ad è la data dell'autore, che può essere sovrascritta --datedall'opzione specificata nella stanza [log] in .gitconfig. Mi piace la data relativa perché dà una sensazione immediata di quando le cose sono state commesse. L'output è simile al seguente:

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

Questo ovviamente è tutto a colori, quindi è facile distinguere le varie parti di una linea di registro. Inoltre è l'impostazione predefinita durante la digitazionegit log causa della sezione [formato].

AGGIORNAMENTO 2014: Poiché git ora supporta il padding, ho un bel emendamento alla versione sopra:

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

Questa destra allinea le date relative e la sinistra allinea i nomi dei committer, il che significa che ottieni un aspetto simile a una colonna che è facile per gli occhi.

Immagine dello schermo

  ss # 1

AGGIORNAMENTO 2016: Dal momento che la firma del commit GPG sta diventando una cosa, ho pensato di aggiornare questo post con una versione che include la verifica della firma (nello screenshot è la lettera magenta subito dopo il commit). Una breve spiegazione della bandiera:

% G ?: mostra "G" per una buona (valida) firma, "B" per una cattiva firma, "U" per una buona firma con validità sconosciuta e "N" per nessuna firma

Altre modifiche includono:

  • i colori vengono ora rimossi se l'output è qualcosa di diverso da tty (che è utile per il grepping ecc.)
  • git log -g ora contiene il selettore reflog.
  • Salva 2 parentesi sui nomi dei nomi e mettili alla fine (per preservare l'allineamento delle colonne)
  • Troncare le date relative se sono troppo lunghe (ad es. 3 years, 4..)
  • Tronca i nomi dei committer (potrebbe essere un po 'breve per alcuni ppl, basta cambiare %<(7,trunc)o controllare la funzione git .mailmap per abbreviare i nomi dei committer)

Ecco la configurazione:

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

L'allineamento delle colonne nel complesso è ora conservato molto meglio a spese di alcuni personaggi (si spera) inutili. Sentiti libero di modificare se hai qualche miglioramento, mi piacerebbe che il colore del messaggio dipendesse dal fatto che un commit sia firmato, ma non sembra che sia possibile.

Immagine dello schermo

Schermata del registro git


3
Puoi abbreviare ancora di più le linee usando una mailmap . Ho abbreviato i nomi dei colleghi nel mio posto di lavoro fino al loro solo nome :-)
andsens,

2
Le risposte in formato --pretty sono buone e la tigrisposta fornisce interattività senza alcuna configurazione richiesta, ma questa è brillante - fornisce l'output di una riga richiesto (con il colore da avviare!) Usando il comando standard 'git log'. Molto bella.
Brent Faust,

Quando uso --right-left, non ottengo più i > <segni. Ho provato ad aggiungere %mal formato, ma poi >appare ogni volta, anche per un normale git log. Qualche indizio su come i marchi si comportano normalmente con il formato?
Vituel,

1
@AlvaroCavalcanti sicuramente nessun problema! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens

2
@ TrầnViệtHoàng --onelineè solo un alias per --pretty=oneline. format.prettyè il formato piuttosto predefinito, ma non c'è modo di sovrascrivere format.onelineafaik. Quello che farei è omettere la pretty = shortlogriga nella configurazione e quindi creare un alias per l'esecuzione git log --pretty=shortlog.
andsens,

99
git log --pretty=format:"%H %an %ad"

utilizzare --date=per impostare un formato data

git log --pretty=format:"%H %an %ad" --date=short

1
Grande! La prossima volta probabilmente userò solo% h su% H dato che l'hash non ha senso per i miei occhi umani :)
Jesper Rønn-Jensen,

come vuoi. ho solo dato un semplice esempio;)
knittl

2
Freddo! Non ero a conoscenza di --date = short
Jesper Rønn-Jensen,

3
Basta lanciarlo là fuori (8 anni di ritardo): l'hash può sembrare una sciocchezza, ma è uno strumento utile se si desidera criptare o confrontare i commit. Spesso elenchi l'hash non perché ha un significato, ma perché ha un uso
stevendesu,

81

Sentiti libero di usare questo:

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

Nota -7alla fine, per mostrare solo le ultime 7 voci.

Guarda:

inserisci qui la descrizione dell'immagine


3
--date=shortpuò essere aggiunto per renderlo più breve.
xuhdev,

@Hannes, dove sono i nomi delle filiali?
Pacerier

@Pacerier git logmostra sempre la cronologia del ramo attualmente estratto.
Hannes Schneidermayer,

Aggiungi %dper ripristinare "nomi di riferimento" come (HEAD -> master).
2540625,

Perché usare resetinvece di auto?
2540625,

49

tig è una possibile alternativa all'utilizzo del registro git comando , disponibile sulle principali distribuzioni open source * nix.

Su debian o ubuntu prova a installare ed eseguire come segue:

$ sudo apt-get install tig

(tig viene installato)

$ tig

(il registro viene visualizzato nel cercapersone come segue, con l'hash del commit corrente visualizzato in basso)

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%)

Poiché il markdown non supporta la colorazione del testo, immagina: colonna 1: blu; colonna 2: verde; colonna 3: colore predefinito del testo. Ultima riga, evidenziata. Premi Q o q per uscire.


tiggiustifica le colonne senza bordi frastagliati , cosa che una scheda ascii (% x09) non garantisce.

Per un formato di data breve premere maiuscola D (nota: la minuscola d apre una vista diff.) Configurarla permanentemente aggiungendo show-date = shorta ~ / .tigrc; o in a[tig] sezione in .git / configure o ~ / .gitconfig.

Per vedere un intero cambiamento :

  • premi Invio . Un riquadro secondario si aprirà nella metà inferiore della finestra.
  • utilizzare i tasti k , j per scorrere la modifica nel riquadro secondario.
  • allo stesso tempo, utilizzare i tasti su , giù per passare da commit a commit.

Poiché tig è separato da git e apparentemente specifico per * nix, probabilmente richiede cygwin per l'installazione su Windows. Ma per fedora credo che l'installazione comandi sono $ su, (enter root password),# yum install tig . Per FreeBSD prova % su, (enter root password), # pkg_add -r tig.


A proposito, tig è molto più di una rapida visualizzazione del registro: schermate e manuale


si prega di fornire un esempio completo. Scrivere tignella mia console mi dà semplicemente un errore-bash: tig: command not found
Jesper Rønn-Jensen il

10
Wow. questo strumento è fantastico e sorprendentemente veloce! brew install tig
corrida

se usi mac, prepara install tig
Pedro Brasileiro,

1
su Windows, gli utenti di babun possonopact install tig
obojdi il

34
git log --pretty=format:'%h %ad %s (%an)' --date=short  

o

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

... riff su sopra la risposta di cdunn2001: perderei l'e-mail dell'autore e includerei solo il nome dell'autore, come per Jesper e Knittl, ma in linea con l'idea di cdunn2001 di mantenere l'output in colonne di larghezza costante per facilità di lettura ( grande idea!). Al posto di una colonna giustificata a sinistra separata per il nome dell'autore, tuttavia, racchiudo quella bandiera alla fine del comando tra parentesi o la compenso con una pipe. (Potrebbe davvero essere qualsiasi personaggio che serva da aiuto visivo nella lettura dell'output ... anche se potrebbe avere senso evitare barre rovesciate in avanti o indietro al fine di ridurre la confusione dell'output con una directory o qualcosa del genere.)

Uscita campione:

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

31

Usa alias git predefinito, ovvero:

$ git work

Creato una volta dal 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

O più colorato con il grafico:

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

inserisci qui la descrizione dell'immagine


Sì, mi piace questo!
Alex

8
git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

Risultato:

e17bae5 2011-09-30  Integrate from development -> main      nixon@whitehouse.gov
eaead2c 2011-09-30  More stuff that is not worth mentioning bgates@apple.com
eb6a336 2011-09-22  Merge branch 'freebase' into development        jobs@nirvana.org

Il materiale a larghezza costante è il primo. La parte meno importante - il dominio e-mail - è l'ultima e facile da filtrare.


4

Per mostrare i commit che ho messo in scena che sono pronti a spingere lo faccio

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

L'output è simile al seguente:

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

Dove la prima colonna appare in giallo, e 'H' 'm' e 't' tra parentesi mostrano HEAD, master e trunk e appaiono nei loro soliti colori "--decorate"

Eccolo con le interruzioni di riga in modo da poter vedere cosa sta facendo:

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}'

Ho impostato la "messa in scena" con:

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}"'

(C'è un modo più semplice per sfuggire a ciò? È stato un po 'complicato capire cosa fosse necessario scappare)


La mia versione attuale di questo script è ~ 300LOC e fa molto di più: ¶ - opzione per attivare / disattivare il messaggio di commit online / multilinea¶ - mostra lo spazio bianco / termina la linea in modalità online. ad esempio: ¶ - specifica l'intervallo tramite parametro¶ - Evidenzia il numero # 's¶ - evidenzia / ^ - (Correggi | Aggiungi | Rifattore) / nei messaggi di commit¶
Sam Hasler

Per la quotazione automatica alias affidabile, vedere questa risposta . Vuoi condividere il tuo ~ 300LOC in breve?
Tom Hale,

Grazie Tom! se torno a pubblicare quello script (dovrei rimuovere alcune cose riservate / specifiche dell'azienda) ti chiamerò qui.
Sam Hasler,

1

Tutti i suggerimenti di cui sopra utilizzano %ssegnaposto per soggetto. Ti consiglio di usarlo %Bperché la %sformattazione conserva nuove righe e il messaggio di commit a più righe appare schiacciato.

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

0

Esegui questo nella cartella del progetto:

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

E se ti piace, aggiungi questa riga al tuo ~ / .gitconfig:

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

0

Prova git log --pretty = fuller, ti mostrerà: - Autore: Data autore: Impegno: Data impegno:

Spero che sia di aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.