อย่าใช้ git-log สำหรับการเขียนสคริปต์: ใช้อย่างใดอย่างหนึ่งgit-rev-list
หรือgit-log
ด้วยรูปแบบที่กำหนดเองที่ระบุ ( --format=*<sth>*
ตัวเลือก)
มีปัญหาเพิ่มเติมกับคำถามของคุณ: อาจมีTAIL root comm (การกระทำโดยไม่มีผู้ปกครอง) มากกว่าหนึ่งรายการในที่เก็บ (แม้ว่าเราจะลดราคาสาขาที่ไม่ได้เชื่อมต่อเช่น 'html', 'man' และ 'todo' ใน git.git พื้นที่เก็บข้อมูล) โดยปกติจะเป็นผลมาจากการเข้าร่วมโครงการแยกกันในโครงการเดียวหรือใช้การรวมแผนผังย่อยของโครงการย่อยที่พัฒนาแยกกัน
ตัวอย่างเช่น git repository มี 6 root commits: git-gui, gitk (subtree-merged), gitweb (รวมเข้าแล้วไม่ได้รับการพัฒนาแยกต่างหากอีกต่อไป), git mail tools (ผสานในช่วงต้นของประวัติโครงการ) และ p4-fast-export ( อาจจะบังเอิญ) นั่นยังไม่นับรากของกิ่ง "html และ" คน "สาขา" สะดวก "ซึ่งมีเอกสารประกอบที่สร้างไว้ล่วงหน้าและสาขา" สิ่งที่ต้องทำ "พร้อมรายการสิ่งที่ต้องทำและสคริปต์
หากคุณมีคอมไพล์ 1.7.4.2 หรือใหม่กว่าคุณสามารถใช้--max-parents
ตัวเลือก:
$ git rev-list --max-parents=0 HEAD
มิฉะนั้นคุณสามารถรับรายการคอมมิตที่ไม่มีผู้ปกครอง (root) ทั้งหมดที่เข้าถึงได้จากสาขาปัจจุบันโดยใช้:
$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
git rev-list HEAD | tail -n 1
และgit rev-list --max-parents=0 HEAD
จะไม่ส่งคืนค่าแฮชเดียวกันให้ฉัน สิ่งที่ใช้--max-parents=0
คือในความเป็นจริงได้รับการกระทำเริ่มต้นแม้ว่า แค่คิดว่าฉันจะชี้ให้เห็นว่าอย่างหลังดูน่าเชื่อถือมากขึ้น