พิมพ์ข้อความกระทำของการกระทำที่กำหนดในคอมไพล์


244

ฉันต้องการคำสั่งการวางท่อเพื่อพิมพ์ข้อความคอมมิชชันของคอมมิทที่กำหนดไว้ - ไม่มีอะไรมากไปกว่านั้นไม่มีอะไรน้อย


3
หากใครมาที่นี่กำลังมองหาวิธีพิมพ์ข้อความคอมมิชชันบรรทัดเดียว แต่ไม่สนใจเกี่ยวกับการแฮชที่ปรากฏในตอนต้นงานต่อไปนี้:git show -s --oneline <commit>
วาลดีริอัส

เราจะเพิ่มบรรทัดที่จะพิมพ์ข้อความคอมมิชชันในเครื่องเซิร์ฟเวอร์ได้ที่ไหน? ฉันหมายถึงไฟล์เบ็ดอันใด

คุณหมายความว่าอย่างไรโดยคำสั่ง "plumbing"
ไบรอันแอช

คำตอบ:


332

ไม่ใช่ "ประปา" แต่มันจะทำสิ่งที่คุณต้องการ:

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

หากคุณต้องการคำสั่ง "การประปา" อย่างแน่นอน (ไม่แน่ใจว่าทำไมถึงเป็นข้อกำหนด) คุณสามารถใช้rev-list:

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

แม้ว่าrev-listจะพิมพ์ออกมายอมรับ sha (ในบรรทัดแรก) นอกเหนือจากข้อความยืนยัน


4
ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน - แต่ฉันใช้%s%bแทน%B(บนกล่อง Linux)
adamk

17
%Bเป็นตัวระบุที่ถูกต้อง (อย่างน้อยใน Git 1.7.2 ไม่แน่ใจว่าเมื่อมันถูกเพิ่ม)
mipadi

2
%Bถูกเพิ่มในบางครั้งหลังจาก 1.7.1 (อาจเป็นใน 1.7.1.1)
mipadi

1
แน่นอนมัน - Git 1.7.2 เห็นได้ชัด ขอบคุณมาก ๆ!
Mark Probst

นอกจากนี้คุณยังสามารถใช้: $ git log --format=%B -n 1 <commit> | cat -นั่นจะให้ข้อความกระทำและไม่มีการกระทำ sha และคุณสามารถ "ท่อ" มัน ฉันใช้สิ่งนี้เป็นส่วนหนึ่งของสคริปต์ CI ของฉัน
เปาโลMuñoz

138

git showเป็นคำสั่งแบบประปามากกว่าgit logและมีตัวเลือกการจัดรูปแบบเหมือนกัน:

git show -s --format=%B SHA1

9
และถ้าคุณต้องการเพียงแค่บรรทัดแรก ( "เรื่อง") ใช้แทน%s %B
ntc2

13
(ฉันชอบสิ่งนี้กับคำตอบ "log" หรือ "rev-list" ที่ได้รับการยอมรับเนื่องจากเป็นการดำเนินการเดียวแทนที่จะเป็นรายการ จำกัด 1 รายการ)
Rich

17

ไม่ใช่ระบบประปา แต่ฉันมีสิ่งเหล่านี้ใน. gitconfig ของฉัน:

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

นั่นคือ "สรุปครั้งสุดท้าย" และ "ข้อความสุดท้าย" คุณสามารถจัดทำคอมมิทเพื่อรับข้อมูลสรุปหรือข้อความของคอมมิท (ฉันใช้ 1.7.0.5 ดังนั้นไม่มี% B)


คุณสามารถส่งผ่านอาร์กิวเมนต์ -n เป็นพารามิเตอร์ ดังนั้นแทนที่จะส่งคืนคอมมิชชันล่าสุดเท่านั้นคุณจึงสามารถทำการคอมมิท 5 ครั้งล่าสุดได้ นี่คือการเปลี่ยนแปลงที่จำเป็น lsum = "! f () {git log -n $ 1 --pretty = รูปแบบ: '% s';}; f" lmsg = "! f () {git log -n $ 1 --pretty = รูปแบบ : '% s% n% n% b';}; f "พบที่นี่stackoverflow.com/questions/7005513/… คุณเพิ่งเรียกใช้คอมไพล์นี้ lsum 5
kuklei

15

นี่จะทำให้คุณมีรายการข้อความที่สั้นมากในเวลาที่ระบุ

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

4

ฉันเริ่มใช้

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

ดูเหมือนว่าจะเร็วกว่า

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

ทั้งคู่ให้ผลลัพธ์เหมือนกัน


1
นั่นแสดงบรรทัดแรกเท่านั้น (% s) ไม่ใช่ข้อความที่ส่งทั้งหมด ("ไม่มีอะไรมากไม่มีอะไรน้อย" ตามที่ผู้ถามเขียน) หากคุณมีวิธีในการทำโชว์สาขาด้วย% B นั่นจะเป็นประโยชน์
Canonical Chris

3

ฉันใช้ shortlog สำหรับสิ่งนี้:

$ git shortlog master..
Username (3):
      Write something
      Add something
      Bump to 1.3.8 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.