Git: วิธีแสดงรายการ commits ในสาขานี้ แต่ไม่ใช่จากสาขาที่ผสาน


92

สมมติว่าประวัติการคอมไพล์ของคุณมีลักษณะดังนี้:

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

เป็นไปได้ไหมที่จะมีรายการคอมไพล์เฉพาะการทำงานบน master, AF? กล่าวอีกนัยหนึ่งคือถ้าการคอมมิตอยู่ในสาขาที่รวมเข้าด้วยกันฉันไม่ต้องการให้แสดง


2
ดังนั้นคอมไพล์จะรู้ได้อย่างไรว่าส่วนใดDและZเป็นส่วนหนึ่งของสาขาที่รวมเข้าด้วยกัน?
Romain

2
เมื่อรวมจาก master แล้ว master คนก่อนจะเป็นผู้ปกครองคนแรกในการผสาน git logอนุญาตให้แสดงเฉพาะสิ่งที่กระทำด้วย--first-parentดังนั้นคุณจะได้รับสิ่งที่ถูกต้อง
CharlesB

คำตอบ:


134

git logมีตัวเลือก--first-parentดังนั้นคุณจะไม่ได้รับtopicประวัติ

เมื่อรวมจากmasterการmasterกระทำที่มีพ่อแม่เป็นครั้งแรกในการผสาน บันทึก Git อนุญาตให้แสดงเฉพาะสิ่งที่กระทำกับ - ผู้ปกครองคนแรกดังนั้นคุณจะได้รับสิ่งที่ถูกต้อง


25
+1 --first-parentได้ไหม :) รวมกับ--no-mergesคุณสามารถซ่อน
คอมมิต

ฉันโหวตแล้ว แต่ก็ยังดูมากเกินไปเมื่อเทียบกับคำตอบของฉัน
UpAndAdam

22

TLDR : git log origin/master --no-mergesจะให้บันทึกของมาสเตอร์และไม่รวมคอมมิตที่ผสาน (ในกรณีนี้คือ x, y, z)

คะแนนดั้งเดิม

มีอีกวิธีหนึ่งทั่วไปในการดำเนินการเกี่ยวกับเรื่องนี้ที่ไม่ต้องพึ่งพา--first-parentซึ่งจะเป็นประโยชน์ในบางสถานการณ์ .. โดยใช้ตัวกรองการยกเว้นสาขา

git log origin/topic ^origin/master สิ่งนี้จะให้บันทึกของคุณorigin/topicโดยorigin/masterลบการกระทำทั้งหมดออก

คุณยังสามารถเพิ่ม--no-mergesซึ่งจะซ่อนการรวมคอมมิตที่คุณอาจต้องการหรือไม่ก็ได้

เคล็ดลับที่มีประโยชน์อีกประการหนึ่งคือการใช้shortlogแทนlogซึ่งจะช่วยให้คุณได้รับข้อมูลสรุปที่ย่อแล้วซึ่งสามารถเป็นประโยชน์สำหรับบันทึกประจำรุ่นหรือการสื่อสารสิ่งที่อยู่ในสาขา

อัปเดต
หลังจากอ่านสิ่งนี้อีกครั้งคุณอาจต้องการสิ่งที่ตรงกันข้ามกับสิ่งที่ฉันโพสต์ อย่างไรก็ตามมันจะจบลงด้วยการยกเว้นทุกสิ่งที่อยู่บนหลักและ foo ( git log origin/master ^origin/foo) อย่างไรก็ตามคุณยังสามารถรับสิ่งที่คุณขอ (ซ่อนการกระทำทั้งหมดที่เป็นส่วนหนึ่งของการผสาน) ด้วยgit log origin/master --no-merges


0

คำตอบโดย Charles เหมาะสำหรับฉัน

git log has option --first-parent --no-merges, so you won't get topic history.

แต่ถ้าคุณใช้อินเทอร์เฟซผู้ใช้แบบกราฟิกสำหรับกิจกรรม Git ของคุณเช่น Git Extension, SourceTree, Tortoise Git,

จากนั้นมีตัวเลือกโดยตรงในการตรวจสอบผู้ปกครองคนแรกในเครื่องมือของคุณ ฉันคิดว่าจะเพิ่มคำตอบนี้ลงในรายการเนื่องจากคนส่วนใหญ่มองว่า Graphic Interface นั้นง่าย และคุณสามารถเลือกคำมั่นทั้งหมดจากสาขานั้นจากเครื่องมือได้โดยตรงหากจำเป็น

ฉันได้แนบตัวอย่างของเครื่องมือสองตัวมันจะคล้ายกันสำหรับเครื่องมืออื่น ๆ เช่นกัน: [ฉันได้เบลอชื่อผู้ใช้ชื่อ git repo เนื่องจากนี่เป็นที่เก็บส่วนตัว แต่คุณยังสามารถเข้าใจวิธีใช้พาเรนต์แรกจากเครื่องมือ ]

  1. ส่วนขยาย Git
    • เปิดส่วนขยาย Git -> ชำระเงินสาขาฟีเจอร์ที่คุณต้องการดูคอมมิตมีตัวเลือกให้เลือกคอมมิตก่อนตามที่แสดงในรูปภาพ:

ป้อนคำอธิบายภาพที่นี่

  1. Tortoise Git
    • เปิดโฟลเดอร์ที่เก็บ -> คลิกที่แสดงบันทึกจาก Tortoise Git -> ชำระเงินสาขาและเลือกการคอมมิตก่อนตามที่แสดงในรูปภาพ

ป้อนคำอธิบายภาพที่นี่


-3

สิ่งนี้ไม่ได้ผล?

git log master
git log --stat master

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