วิธีกำหนดค่า 'git log' เพื่อแสดง 'วันที่กระทำ'


127

ฉันgit logจะกำหนดค่าให้แสดงcommit dateแทนได้author dateอย่างไร


25
@Colleen แต่ละคอมมิตมีสองวันที่เชื่อมโยงกัน - AuthorDate และ CommitDate (ดูgit show --pretty=fuller HEADตัวอย่าง) สำหรับการพัฒนาท้องถิ่นสิ่งเหล่านี้มักจะเหมือนกัน แต่สำหรับแพตช์ที่เพิ่มผ่านอีเมลหรือกลไกอื่น ๆ อาจแตกต่างกันโดยที่ AuthorDate คือวันที่สร้างแพตช์และ CommitDate เป็นเวลาที่ถูกนำไปใช้กับที่เก็บจริง
twalberg

คำตอบ:


145

มีหลายตัวเลือกในการพิมพ์วันที่ อาจเป็นวิธีที่ง่ายที่สุดคือใช้--prettyรูปแบบสำเร็จรูปรูปแบบใดรูปแบบหนึ่งเช่นgit log --pretty=fullerซึ่งจะแสดงวันที่ทั้งสอง หากคุณต้องการที่จะเห็นเพียงวันเดียว git log --format=<some stuff>แต่ทำให้มันกระทำวันที่คุณสามารถใช้ ทุกรหัสที่อนุญาตgit help logสำหรับการกำหนดรูปแบบการบันทึกไว้ใน วันที่กระทำการเป็นหนึ่ง%cd, %cD, %cr, %ctหรือ%ciขึ้นอยู่กับรูปแบบที่คุณชอบมันใน

หากเป็นสิ่งที่คุณต้องการทำบ่อยๆให้ใส่นามแฝงหรือเขียนสคริปต์เสริมเพื่อประหยัดเวลาพิมพ์


53

คุณสามารถใช้--pretty=formatและใช้%crสำหรับวันที่ที่สัมพันธ์กัน

ตัวอย่างเช่น:

$ git log --graph --pretty=format:'%C(auto)%h%d (%cr) %cn <%ce> %s'

คุณสามารถกำหนดนามแฝงใน git เพื่อให้ใช้งานได้ง่ายขึ้น ฉันมีสิ่งต่อไปนี้ใน.gitconfig:

[alias]
# see `git help log` for detailed help.
#   %h: abbreviated commit hash
#   %d: ref names, like the --decorate option of git-log(1)
#   %cn: commiter name
#   %ce: committer email
#   %cr: committer date, relative
#   %ci: committer date, ISO 8601-like format
#   %an: author name
#   %ae: author email
#   %ar: author date, relative
#   %ai: author date, ISO 8601-like format
#   %s: subject
# my awesome git log replacement
lol  = log --graph --pretty=format:\"%C(auto)%h%d%Creset %C(cyan)(%cr)%Creset %C(green)%cn <%ce>%Creset %s\"
# same as above, but ISO date
lold = log --graph --pretty=format:\"%C(auto)%h%d%Creset %C(cyan)(%ci)%Creset %C(green)%cn <%ce>%Creset %s\"
# using build-in standards
lol2 = log --oneline --graph --decorate
# shows branches and their last commits
lol3 = log --all --graph --decorate --oneline --simplify-by-decoration

บน Linux หรือระบบที่คล้ายกันคุณสามารถใช้ single-quotes 'แทน double-quotes ":

[alias]
lol = log --graph --pretty=format:'%C(auto)%h%d%Creset %C(cyan)(%cr)%Creset %C(green)%cn <%ce>%Creset %s'

ด้วยสิ่งนี้เพียงแค่เรียกใช้git lolหรือตัวแปรอื่น ๆ เพื่อดูผลลัพธ์ที่สวยงาม

นี่คือผลลัพธ์ของgit lol --simplify-by-decoration:

git lol เอาท์พุท

  • มันดูดี. :)
  • lolพิมพ์ง่ายกว่าlogและฟังดูดีกว่าด้วย
    • ยังช่วยให้คุณสามารถเข้าถึงได้ตามปกติgit logหากคุณต้องการ
  • ดวงตาของคุณสามารถสแกนเนื้อหาได้อย่างรวดเร็วด้วยสีที่ต่างกัน
  • ชื่อและอีเมลมีประโยชน์มากสำหรับโครงการ / องค์กรขนาดใหญ่ที่มีผู้ร่วมให้ข้อมูลจำนวนมาก
  • ใช้สีเริ่มต้นสำหรับแฮช / อ้างอิงเพราะมันค่อนข้างดีอยู่แล้ว

นี่คือผลลัพธ์ของgit loldวันที่ในรูปแบบ ISO มีประโยชน์ในการดูวันที่ / เวลาที่แน่นอนที่มีการคอมมิตพร้อมโบนัสที่สามารถดูเขตเวลาของผู้ร่วมให้ข้อมูลได้อย่างง่ายดาย

ใส่คำอธิบายภาพที่นี่

แก้ไข 2020-06 : เพิ่มภาพหน้าจอ อัปเดตเพื่อใช้%C(auto)(สีอัตโนมัติ / เริ่มต้น) สำหรับ%h(คอมมิตแฮช) และ%d(ชื่ออ้างอิง) เพิ่ม%cn(ชื่อคอมมิเตอร์) นอกเหนือจากอีเมล


1
ฉันได้รับข้อผิดพลาดในการแยกวิเคราะห์: git log --graph --pretty=format:\"%C(yellow)%h%Creset%C(cyan)%C(bold)%d%Creset %C(cyan)(%cr)%Creset %C(green)%ce%Creset %s\" bash: ข้อผิดพลาดทางไวยากรณ์ใกล้กับโทเค็นที่ไม่คาดคิด `('
frakman1

2
@ frakman1 - คุณต้องปลด "s" เพื่อให้บรรทัดด้านบนทำงานในเทอร์มินัล
stites

2
แก้ไขบรรทัด: git log --graph --pretty = format: "% C (yellow)% h% Creset% C (cyan)% C (bold)% d% Creset% C (cyan) (% cr)% Creset% C (สีเขียว)% ce% Creset% s "
RedSands

1

ฉันชอบรูปแบบนี้ไม่รวมชื่อผู้แต่งและรวมวันที่จริงสำหรับการคอมมิต

git log --graph --pretty=format:"%C(yellow)%h%x09%Creset%C(cyan)%C(bold)%ad%Creset  %C(green)%Creset %s" --date=short
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.