เข้าสู่ระบบ 10 แรกใน git


96

สองคำถาม:

  1. วิธีแสดง 10 ข้อแรกในคอมมิตตั้งแต่ต้นจนจบ (ไม่มีสาขา)
  2. วิธีระบุดัชนีคอมมิตและบันทึก (แสดงครั้งที่สองหรือสาม)

ฉันรู้ว่าคอมไพล์ใช้พาเรนต์เพื่อเชื่อมโยงคอมมิตมันง่ายที่จะบันทึกคอมมิตตั้งแต่ต้นจนจบ ชอบ:git log HEAD~10

แต่ฉันต้องสอบถามตั้งแต่ต้นจนจบเป็นไปได้ไหม



เลื่อนไปที่คำตอบ @kostix
Muhammad Umer

คำตอบ:


58

เพียงแค่บันทึกทุกอย่างด้วยรูปแบบบรรทัดเดียวและกำหนดผลลัพธ์:

git log  --pretty=oneline | tail -n 10 

3
หรือใช้git rev-list HEAD | tail -n 10เพื่อรับ 10 ID เพื่อแสดงรายการซึ่งคุณสามารถแสดงในรูปแบบใดก็ได้ที่คุณต้องการ (ไม่ จำกัด เฉพาะวิธีการบรรทัดเดียว)
torek

19
tailดูเหมือนว่าจะสูญเสียสีที่ดีที่ฉันได้รับในคอนโซลคอมไพล์ของฉัน การส่งผ่านพารามิเตอร์เช่นเดียวgit log --oneline -10กับในคำตอบอื่น ๆ ทำงานได้ตามที่ฉันคาดไว้
James Hulse

4
นี่เป็นวิธี Unix แบบฮาร์ดคอร์อย่างชัดเจนฮ่า ๆ โปรดดูคำตอบของ @kostix
9301293

1
ข้อเสียของวิธีนี้คือฉันสามารถเห็นการผลักดันของฉันเท่านั้น
แจ็ค '

1
git log --pretty=oneline -10จะแสดงด้วยสี
Marcelo Vani

263
git log -10

จะแสดง 10 คอมมิตล่าสุดที่ตรงกับข้อกำหนดการแก้ไข (ข้อมูลจำเพาะที่ขาดหายไปหมายถึง "คอมมิตทั้งหมด")

ดู manpage:

git help log

มาตรา Commit Limiting

-<number>, -n <number>, --max-count=<number>
    Limit the number of commits to output.

7
เรียบง่ายและไม่ได้ขึ้นอยู่กับtailการใช้งานบนแพลตฟอร์มของคุณ
tenpn

8
& ไม่ยุ่งกับการจัดรูปแบบ / ระบายสีคอมไพล์ นี่ควรเป็นคำตอบที่ยอมรับ x100
kuzyn

10
ไม่ใช่สิ่งที่ฝ่ายปฏิบัติการต้องการ: เขาต้องการfirst10 ไม่ใช่latest.
Timo

2
@Timo อาจจะใช่ แต่คำถามตามที่ระบุไว้นั้นเปิดกว้างสำหรับการตีความและดูเหมือนว่าคนจำนวนมากจะโหวตคำตอบของฉันเพียงเพราะความแตกต่างที่เปิดกว้างเหล่านี้ ดังนั้นในขณะที่ฉันเห็นด้วยกับคุณในทางเทคนิคขอให้เป็นไปตามที่เป็นอยู่ฉันคิดว่า ;-) ในบรรดาคำแนะนำที่ถูกต้องทางเทคนิคฉันชอบความคิดเห็นของ torek มากที่สุดสำหรับคำตอบที่ยอมรับ
kostix

@kostix "วิธีแสดง 10 ข้อแรกในคอมมิตตั้งแต่ต้นจนจบ" ไม่ "เปิดกว้างสำหรับการตีความ" เท่าที่ฉันกังวล มันเห็นได้ชัดขอแรก 10 กระทำไม่ได้ล่าสุด
Bobby Jack

31

นี่คือแนวทางของฉัน

วิธีรับ 10 คอมมิตแรก:

git log -n 10

-n คือตัวเลข

เพิ่มเติม เพื่อรับ 10 คอมมิตถัดไปข้าม 10 แรก:

git log --skip=10 -n 10

ฉันคิดว่านี่ควรเป็นคำตอบที่ได้รับการตอบรับ การใช้ tail จะทำให้ --graph หยุดทำงานใน git log
โล่งอก Melone

นี่ต้องเป็นคำตอบที่ได้รับการยอมรับ ทำงานได้อย่างมีเสน่ห์สำหรับฉัน
Doogle

คุณสูญเสียสีตัวอักษรบนคอนโซลโดยใช้ tail เช่นกัน นี่คือคำตอบที่ถูกต้อง
CESCO

14

ในการรับ 10 ข้อสุดท้าย:

git log HEAD~10..HEAD

ในการรับข้อมูลเหล่านี้ตามลำดับเก่าสุดไปใหม่ล่าสุด:

git log --reverse HEAD~10..HEAD

โปรดทราบว่าหากมีการผสานอาจแสดงมากกว่า 10 คอมมิต เพิ่ม--first-parentหากคุณต้องการสำรวจผ่านแม่แรกของแต่ละสาขาเท่านั้น

git rev-listสำหรับรายละเอียดมากขึ้นโปรดดูเอกสารสำหรับ


แก้ไข: คุณได้รับคำตอบที่เป็นประโยชน์ข้างต้นแล้วว่า "แสดงการกระทำที่ใกล้จุดเริ่มต้นของประวัติศาสตร์" (อีกครั้งดูคำเตือนเกี่ยวกับ DAG ที่ไม่ได้เชื่อมต่อหลายรายการใน repo) แต่คุณสามารถทำได้เช่น:

git log --no-walk `git rev-list HEAD | tail -n 10`

และ:

git log --no-walk `git rev-list --reverse HEAD | head -n 10`

ขึ้นอยู่กับลำดับที่คุณต้องการผลลัพธ์


ขอบคุณสำหรับการตอบกลับของคุณ แต่ฉันไม่ต้องการการคอมมิต 10 ครั้งสุดท้าย แต่เป็นครั้งแรก เพื่อให้เฉพาะเจาะจงถ้าคอมมิตคือ ABCDEFG (HEAD) วิธีการบันทึก ABC และวิธีการบันทึก C โดยดัชนี 2?
yohan zhou

โอ้! ไม่มีการรับประกันว่าจะมี "การกระทำครั้งแรก" เพียงครั้งเดียว แต่ถ้ามีให้ดูลิงก์ที่เพิ่ม @CharlesB
torek

วิธีที่สามารถทำงานได้ วิธีธรรมชาติใด ๆ ? บันทึก git --pretty = oneline | wc -l git log HEAD ~ <จำนวนลบหนึ่งหรือดัชนี>
โยฮันโจว

ขอบคุณสำหรับคำตอบ. นี่คือสิ่งที่ฉันต้องการเพื่อหลีกเลี่ยงตัวเลือกรูปแบบ '-10' ในนามแฝง git ของฉัน ที่ยอมรับอาร์กิวเมนต์จำนวน
vicTROLLA

13

ผลลัพธ์ที่ดีที่สุดมาพร้อมกับการรวมกันของคำตอบที่ดีที่สุด:

git log --pretty=oneline -10

1
ขอบคุณฉันใช้สิ่งนี้เป็นนามแฝง gitเพื่อแสดงการคอมมิตล่าสุดอย่างรวดเร็วโดยไม่ต้องกรอกเทอร์มินัล ฉันเรียกนามแฝงlkj = log --pretty=oneline --abbrev-commit -10ว่า ตอนนี้ฉันรู้แล้วว่ามันไม่ได้ตอบคำถามของ OP แต่ฉันมาที่นี่เพื่อมองหาสวิตช์ตัวเลขง่ายๆ
Paul Rougieux


4

เพียงแค่บันทึกทุกอย่างย้อนกลับ -1 หมายถึงรายการหนึ่งบันทึก

git log  --reverse -1

0

เพราะ ... รายละเอียดเพิ่มเติม: p

  1. วิธีแสดง 10 ข้อแรกในคอมมิตตั้งแต่ต้นจนจบ (ไม่มีสาขา)
  2. วิธีระบุดัชนีคอมมิตและบันทึก (แสดงที่สองหรือสาม)

โดย (ไม่มีสาขา) คุณอาจกำลังถามเกี่ยวกับreflogห่วงโซ่บรรพบุรุษที่กำหนด ต่อไปนี้ไม่มีส่วนเกี่ยวข้องกับสาขาที่คุณอยู่

git log -g --pretty=oneline | tail -10

<sha> HEAD@{###}: action: summary (old)
<sha> HEAD@{###}: action: summary (older)
...
<sha> HEAD@{###}: action: summary (oldest)
  • -gคือ--walk-reflogsแทนที่จะเดินกระทำโซ่วงศ์เดิน entries.q reflog
  • เพิ่ม|cut -d ' ' -f 2|tr -d ':' > logเพื่อบันทึกเฉพาะดัชนี reflog คอมมิต

ข้อมูลต่อไปนี้จะแสดงบรรพบุรุษแรกสุดของสาขาที่เช็คเอาต์ในปัจจุบัน

git log --reverse --pretty=oneline | head -10 | cat -n

1 <sha> summary (oldest)
2 <sha> summary (second)
  • --reverse ส่งออกคอมมิตในลำดับย้อนกลับ
  • ไม่สามารถใช้เพียงแค่-n 10หรือ-10เนื่องจากแตก--reverse
  • cat -n เพิ่มหมายเลขบรรทัด (กระทำดัชนี?)


0

ในกรณีที่มีคนต้องการมากกว่าแค่คอมไพล์บันทึกบรรทัดเดียว:

git log --reverse | awk 'NR>1 {print last} {last=$0}; /^commit/ && ++c==11{exit}'

โดย11ที่ส่วนท้ายควรตั้งค่าให้1มากกว่าจำนวนคอมมิตที่คุณต้องการ

ดังที่นี่ชี้ให้เห็นgit log --reverse -n 10ว่าไม่ได้ผลอย่างที่คุณต้องการ ( ฉันคิดว่ามันจะต้องไม่ใช่การสับเปลี่ยนเพื่อให้คุณสามารถเลือกการกระทำ 10 ครั้งแรกในลำดับย้อนกลับหรือการกระทำ 10 ครั้งสุดท้าย 🤪)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.