Cetak pesan komit dari commit yang diberikan di git

244

Saya memerlukan perintah plumbing untuk mencetak pesan commit dari commit yang diberikan - tidak lebih, tidak kurang.

Tandai Probst
sumber
3
Jika ada yang datang ke sini mencari cara untuk mencetak pesan komit satu baris tetapi tidak peduli dengan hash yang muncul di awal, karya-karya berikut:git show -s --oneline <commit>
waldyrious
Di mana kita harus menambahkan baris untuk mencetak pesan komit di mesin server? Maksud saya file kait yang mana?
Apa yang Anda maksud dengan perintah "plumbing"?
Bryan Ash

Jawaban:

332

Ini bukan "plumbing", tetapi itu akan melakukan apa yang Anda inginkan:

$ git log --format=%B -n 1 <commit>

Jika Anda benar-benar membutuhkan perintah "ledeng" (tidak yakin mengapa itu persyaratan), Anda dapat menggunakan rev-list:

$ git rev-list --format=%B --max-count=1 <commit>

Meskipun rev-listjuga akan mencetak komit sha (di baris pertama) di samping pesan komit.

mipadi
sumber
4
Bekerja dengan sempurna untuk saya - tetapi saya menggunakan %s%bsebagai ganti %B(pada kotak Linux)
adamk
17
%Badalah specifier yang benar (setidaknya, di Git 1.7.2, tidak yakin kapan ditambahkan).
mipadi
2
%Bditambahkan sekitar 1,7.1 (mungkin dalam 1.7.1.1).
mipadi
1
Memang itu - Git 1.7.2 rupanya. Terima kasih banyak!
Mark Probst
Anda juga dapat menggunakan: $ git log --format=%B -n 1 <commit> | cat -Itu akan memberi Anda pesan komit dan tidak ada komit, dan Anda dapat "menyalurkan" itu. Saya sebenarnya menggunakan ini sebagai bagian dari skrip CI saya.
Paulo Muñoz
138

git showlebih merupakan perintah plumbing daripada git log, dan memiliki opsi format yang sama:

git show -s --format=%B SHA1
CharlesB
sumber
9
Dan jika Anda hanya menginginkan baris pertama ("subjek"), gunakan %ssebagai ganti %B.
ntc2
13
(Saya lebih suka ini daripada jawaban "log" atau "rev-list" yang diterima, karena ini adalah operasi komit tunggal, daripada daftar yang dibatasi pada 1 entri.)
Rich
17

Bukan pipa ledeng, tapi saya punya ini di .gitconfig saya:

lsum = log -n 1 --pretty=format:'%s'
lmsg = log -n 1 --pretty=format:'%s%n%n%b'

Itu "ringkasan terakhir" dan "pesan terakhir". Anda dapat memberikan komit untuk mendapatkan ringkasan atau pesan dari komit itu. (Saya menggunakan 1.7.0.5 jadi tidak memiliki% B.)

bstpierre
sumber
Anda bisa melewatkan argumen -n sebagai parameter. Jadi, alih-alih hanya mengembalikan komit terakhir, Anda dapat membuatnya untuk mengembalikan 5 komit terakhir. Di sini diperlukan perubahan lsum = "! F () {git log -n $ 1 --pretty = format: '% s';}; f" lmsg = "! F () {git log -n $ 1 --pretty = format : '% s% n% n% b';}; f "Ditemukan di sini stackoverflow.com/questions/7005513/... Anda cukup menjalankan git lsum 5 ini
kuklei
15

Ini akan memberi Anda daftar yang sangat ringkas dari semua pesan untuk waktu tertentu.

git log --since=1/11/2011 --until=28/11/2011 --no-merges --format=%B > CHANGELOG.TXT
Harshniket Seta
sumber
4

Saya mulai menggunakan

git show-branch --no-name <hash>

Tampaknya lebih cepat daripada

git show -s --format=%s <hash>

Keduanya memberikan hasil yang sama

tidak
sumber
1
Itu menunjukkan baris pertama saja (% s), bukan keseluruhan pesan komit ("tidak lebih, tidak kurang", seperti yang ditulis penanya). Jika Anda memiliki cara melakukan show-branch dengan% B, maka itu akan sangat membantu.
Canonical Chris
3

Saya menggunakan shortlog untuk ini:

$ git shortlog master..
Username (3):
      Write something
      Add something
      Bump to 1.3.8 
mja
sumber