Come emettere git log solo con la prima riga?


330

Sto cercando di personalizzare il formato per git log. Voglio che tutti gli commit vengano mostrati in una riga. Ogni riga dovrebbe mostrare solo la prima riga del messaggio di commit.
Ho scoperto che git log --pretty=shortdovrebbe fare il trucco, ma sul mio computer mostra il registro completo come git logfa (oltre al timestamp).

Inoltre, ho cercato di utilizzare i segnaposto come definito nella pagina man . Tuttavia, non sono riuscito a trovare un comando per abbreviare il messaggio di registro. Ho provato questa riga git log --pretty=format:'%h : %s'che mostra l'hash in corto %he il messaggio completo %sin una riga.

Sto usando git version 1.7.3.1.msysgit.0su Vista.


Forse ha qualcosa a che fare con il modo in cui scrivo i miei messaggi di commit. Ecco un esempio:

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

Quindi, con l'esempio fornito, desidero solo l'output Added some functionality.anteposto dall'hash di shortend.


1
%sè l'oggetto, non il messaggio completo.
Josh Lee,

È davvero difficile dire cosa vuoi veramente. Il shortformato non è tutto su una riga, sebbene (sorpresa!) Lo onelineè. Se onelinee %h : %snon sei quello che vuoi, cosa c'è che non va in loro? In particolare, %sè l'oggetto, la prima riga del messaggio di commit. Dovrebbe davvero essere una versione abbreviata. È possibile che tu abbia fatto dei commit con una sola lunga riga per il messaggio e che tu li abbia visualizzati in qualche modo con la parola a capo?
Cascabel,

Capisci perfettamente. Il problema è che onelinee %snon lo fanno in uscita quello che ci aspettiamo, almeno sul mio computer. Ho aggiornato il mio post con un esempio del mio messaggio di commit. Forse aiuta.
JJD

Risposte:


544

Hai provato questo?

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

Il problema è probabilmente che ti manca una riga vuota dopo la prima riga. Il comando sopra di solito funziona per me, ma ho appena testato su un commit senza una seconda riga vuota. Ho ottenuto lo stesso risultato come te: l'intero messaggio su una riga.

La seconda riga vuota è uno standard nei messaggi di commit git. Il comportamento che vedi è stato probabilmente implementato apposta.

La prima riga di un messaggio di commit deve essere una breve descrizione. Se non riesci a farcela in una sola riga, puoi usarne diverse, ma git considera tutto ciò che precede la prima riga vuota come "breve descrizione". onelinestampa l'intera descrizione breve, quindi tutte e 3 le righe.


Grazie! Hai risolto il mistero: non ho una riga vuota dopo la prima riga nel mio messaggio di commit per separare l'oggetto dal resto. Tuttavia, sarebbe bello se fossi libero di inserirlo o di lasciarlo fuori.
JJD,

1
Nessun problema. In effetti, sei libero di avere la linea vuota o no. Solo che l'intero tuo messaggio diventa un breve messaggio se lo lasci fuori. Mi piace questa breve descrizione / descrizione dettagliata e suppongo che essere limitati a una riga per la breve descrizione sia stato un problema, quindi il requisito della riga vuota. Potresti sempre reindirizzare l'output git loga uno script di filtraggio, ma raccomanderei davvero di scrivere una breve descrizione con una riga vuota.
Gauthier,

89
C'è anche git log --oneline --oneline è una scorciatoia incorporata per "--pretty = oneline --abbrev-commit" usata insieme.
Jeremy Logan,

come sbarazzarsi dell'hashtag abbreviato anteposto? Non che non sia abbastanza carino. Ma senza cut. Sarebbe awkprudente ... (BTW matematica Q: qual è la probabilità che il prossimo bit in una sequenza huffman correttamente codificata, a livello di memoria, sia acceso o spento? Suggerimento: è === 50%.)
Phlip

7
era così. Oh, anche, ho una pagina piena di s, quindi ho naturalmente aggiunto un %per '%s'. C-;
Phlip

158

Fa git log --onelinequello che vuoi?


1
Non voglio che l'intero messaggio di commit venga unito su una riga. Voglio vedere solo la prima riga di ciascun messaggio di commit.
JJD

41

Log git migliore e più semplice creando un alias . Incolla il codice qui sotto sul terminale solo una volta per una sessione. Incolla il codice nel profilo zshrc o bash per renderlo 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"

Produzione

git lg

Uscita linee modificate

git lg -p

In alternativa (consigliato),
incollare questo codice nel file globale .gitconfig

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

Ulteriori letture.
https://coderwall.com/p/euwpig/a-better-git-log
Lettura avanzata.
http://durdn.com/blog/2012/11/22/must-have-git-aliases-advanced-examples/


L'esempio è una bella demo di formato grazioso, ma "Incolla il codice qui sotto sul terminale solo una volta" sembra sbagliato perché non crea un alias per "git lg"
Drone2537,

notare ad altri, se si inserisce questo comando in batch, sostituire% con %%, sostituire 'con "". risultato = git log --color --graph --pretty=format:"%%Cred%%h%%Creset -%%C(yellow)%%d%%Creset %%s %%Cgreen(%%cr) %%C(bold blue)<%%an>%%Creset" --abbrev-commit %1. Puoi passare -p a questo file bat per ottenere anche le linee modificate
Dheeraj Bhaskar


25

È possibile definire un alias globale in modo da poter richiamare un breve registro in un modo più comodo:

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

Quindi puoi chiamarlo usando git slog(funziona anche con il completamento automatico se lo hai abilitato).



-8

se vuoi usarlo sempre git login questo modo puoi aggiungere git alias di

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

dopo ciò git logstamperà ciò che normalmente verrebbe stampato dagit log --oneline


12
Questo in realtà non funziona, perché (gli alias A. git non possono sovrascrivere i nomi dei comandi integrati) e (B. Ci devono essere delle virgolette "log --oneline").
Max Nanasy,
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.