Bagaimana cara mengeluarkan git log dengan baris pertama saja?

330

Saya mencoba menyesuaikan format untuk git log. Saya ingin semua komitmen ditampilkan dalam satu baris. Setiap baris hanya menampilkan baris pertama dari pesan commit.
Saya menemukan bahwa git log --pretty=shortharus melakukan trik tetapi pada komputer saya itu menunjukkan log lengkap seperti git loghalnya (selain cap waktu).

Selanjutnya, saya mencoba menggunakan penampung seperti yang didefinisikan dalam halaman manual . Meskipun demikian, saya tidak dapat menemukan perintah untuk mempersingkat pesan log. Saya mencoba baris ini git log --pretty=format:'%h : %s'yang menunjukkan hash korsleting %hdan pesan lengkap %sdalam satu baris.

Saya menggunakan git version 1.7.3.1.msysgit.0di Vista.


Mungkin itu ada hubungannya dengan cara saya menulis pesan komit saya. Berikut ini sebuah contoh:

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

Jadi, dengan contoh yang diberikan saya hanya ingin menjadi output Added some functionality.diawali oleh hash shortend.

JJD
sumber
1
%sadalah subjek, bukan pesan lengkap.
Josh Lee
Sangat sulit untuk mengatakan apa yang sebenarnya Anda inginkan. The shortFormat tidak semua dalam satu baris, meskipun (kejutan!) onelineAdalah. Jika onelinedan %h : %sbukan apa yang Anda inginkan, apa yang salah dengan mereka? Khususnya, %sadalah subjek, baris pertama dari pesan komit. Itu memang versi singkat. Mungkinkah Anda telah membuat komitmen dengan satu baris panjang untuk pesan tersebut, dan melihatnya dengan bungkus kata?
Cascabel
Anda benar-benar mengerti. Masalahnya adalah itu onelinedan %stidak menampilkan apa yang kita harapkan, setidaknya di komputer saya. Saya memperbarui posting saya dengan contoh pesan komit saya. Mungkin itu membantu.
JJD

Jawaban:

544

Sudahkah Anda mencoba ini?

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

Masalahnya mungkin Anda kehilangan baris kosong setelah baris pertama. Perintah di atas biasanya bekerja untuk saya, tetapi saya baru saja menguji komit tanpa baris kedua yang kosong. Saya mendapat hasil yang sama seperti Anda: seluruh pesan dalam satu baris.

Baris kedua kosong adalah standar dalam pesan git commit. Perilaku yang Anda lihat mungkin dilaksanakan dengan sengaja.

Baris pertama dari pesan komit dimaksudkan sebagai deskripsi singkat. Jika Anda tidak dapat membuatnya dalam satu baris, Anda dapat menggunakan beberapa baris, tetapi git menganggap semuanya sebelum baris kosong pertama menjadi "deskripsi singkat". onelinemencetak seluruh deskripsi singkat, jadi semua 3 baris Anda.

Gauthier
sumber
Terima kasih! Anda memecahkan misteri: Saya tidak memiliki baris kosong setelah baris pertama dalam pesan komit saya untuk memisahkan subjek dari yang lain. Namun demikian, alangkah baiknya jika saya bebas untuk meletakkannya atau meninggalkannya.
JJD
1
Tidak masalah. Bahkan, Anda bebas memiliki saluran kosong atau tidak. Hanya bahwa seluruh pesan Anda menjadi pesan singkat jika Anda meninggalkannya. Saya suka uraian singkat / uraian terperinci ini, dan saya kira bahwa terbatas pada satu baris untuk uraian singkat adalah masalah, maka persyaratan baris kosong. Anda selalu dapat menyalurkan output git logke skrip penyaringan, tapi saya benar-benar akan menyarankan penulisan deskripsi singkat dengan baris kosong.
Gauthier
89
Ada juga git log --oneline --oneline adalah singkatan untuk "--pretty = oneline --abbrev-commit" yang digunakan bersama.
Jeremy Logan
bagaimana Anda menyingkirkan hashtag yang dipersingkat sebelumnya? Bukan berarti itu tidak sedikit cantik. Tapi tanpa itu cut. Itu akan awkmenangkal ... (BTW matematika T: berapa peluang bit berikutnya dalam urutan huffman yang dikodekan dengan benar, pada tingkat penyimpanan, aktif atau nonaktif? Petunjuk: Ini === 50%.)
Phlip
7
itu dia tx. Oh, juga, saya punya halaman penuh s, jadi saya secara alami menambahkan %untuk '%s'. C-;
Phlip
158

Apakah git log --onelinemelakukan yang Anda inginkan?

9000
sumber
1
Saya tidak ingin seluruh pesan komit digabung menjadi satu baris. Saya ingin melihat baris pertama dari setiap pesan komit saja.
JJD
41

Log git yang lebih baik dan lebih mudah dengan membuat alias . Rekatkan kode di bawah ini ke terminal hanya sekali untuk satu sesi. Rekatkan kode ke profil zshrc atau bash untuk membuatnya tahan.

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"

Keluaran

git lg

Output berubah baris

git lg -p

Atau (disarankan)
Tempel kode ini ke file global .gitconfig

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

Bacaan lebih lanjut.
https://coderwall.com/p/euwpig/a-better-git-log
Bacaan Tingkat Lanjut.
http://durdn.com/blog/2012/11/22/must-have-git-aliases-advanced-examples/

atilkan
sumber
Contohnya adalah demo yang bagus untuk format-cantik, tetapi "Tempel kode di bawah ini ke terminal sekali saja" tampaknya salah karena tidak membuat alias untuk "git lg"
Drone2537
perhatikan orang lain, jika Anda menempatkan perintah ini dalam batch, ganti% dengan %%, ganti 'dengan "". hasil = git log --color --graph --pretty=format:"%%Cred%%h%%Creset -%%C(yellow)%%d%%Creset %%s %%Cgreen(%%cr) %%C(bold blue)<%%an>%%Creset" --abbrev-commit %1. Anda dapat mengirimkan -p ke file bat ini untuk mendapatkan baris yang diubah juga
Dheeraj Bhaskar
30

Ini akan mencetak hanya pesan (baris subjek saja) tanpa hash :

git log --pretty=format:%s
technophyle
sumber
3
%suntuk subjek; %buntuk tubuh; %Buntuk keduanya ("bahan mentah" di git-scm.com/docs/pretty-formats )
Mathieu CAROFF
25

Anda dapat mendefinisikan alias global sehingga Anda dapat memanggil log pendek dengan cara yang lebih nyaman:

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

Kemudian Anda bisa menyebutnya menggunakan git slog(bahkan berfungsi dengan pelengkapan otomatis jika Anda mengaktifkannya).

Orang Brasil itu
sumber
8

Tanpa komit pesan, hanya hash:

git log --pretty=oneline | awk '{print $1}'
otiai10
sumber
7
Jika Anda hanya menginginkan hash ...git log --pretty=format:"%H"
michael_j_ward
Jika Anda hanya menginginkan hash, Anda juga dapat menggunakannya git rev-list HEAD.
Fabio mengatakan Reinstate Monica
-8

jika Anda ingin selalu menggunakan git logcara seperti itu, Anda dapat menambahkan git alias oleh

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

setelah itu git logakan mencetak apa yang biasanya dicetak olehgit log --oneline

berisik
sumber
12
Ini sebenarnya tidak berhasil, karena (alias A. git tidak dapat menimpa nama perintah bawaan) dan (B. Harus ada tanda kutip di sekitar "log --oneline").
Max Nanasy