คำตอบนี้ได้รับการแก้ไขเนื่องจากความเข้าใจแผนภาพและข้อสรุปของฉันไม่ถูกต้อง
git pull
ทำให้เกิดการผสานคอมมิตเนื่องจากคอมไพล์กำลังผสาน สิ่งนี้สามารถเปลี่ยนแปลงได้โดยการตั้งค่าสาขาของคุณให้ใช้ rebase แทนการผสาน การใช้ rebase แทนการผสานบน pull ให้ประวัติเชิงเส้นมากขึ้นไปยังที่เก็บที่แบ่งใช้ ในทางกลับกันการผสานแสดงให้เห็นถึงความพยายามในการพัฒนาแบบคู่ขนานในสาขา
ตัวอย่างเช่นคนสองคนทำงานในสาขาเดียวกัน สาขาเริ่มต้นด้วย:
...->C1
คนแรกทำงานเสร็จและผลักดันไปที่สาขา:
...->C1->C2
คนที่สองทำงานเสร็จอยากดัน แต่ทำไม่ได้เพราะต้องอัพเดท ที่เก็บในเครื่องสำหรับบุคคลที่สองมีลักษณะดังนี้:
...->C1->C3
หากการดึงถูกตั้งค่าให้ผสานที่เก็บบุคคลที่สองจะมีลักษณะดังนี้
...->C1->C3->M1
\ /
->C2->
โดยที่ M1 คือการรวมคอมมิต ประวัติสาขาใหม่นี้จะถูกผลักไปที่ repo ในกรณีนี้การดึงถูกตั้งค่าเป็นฐานใหม่ repo ในเครื่องจะมีลักษณะดังนี้:
...->C1->C2->C3
ไม่มีการรวมคอมมิต ประวัติศาสตร์ถูกทำให้เป็นเส้นตรงมากขึ้น
ทั้งสองทางเลือกสะท้อนถึงประวัติศาสตร์ของสาขา git ช่วยให้คุณสามารถเลือกประวัติที่คุณต้องการได้
มีสถานที่ที่ rebase อาจทำให้เกิดปัญหากับสาขาระยะไกลได้ นี่ไม่ใช่หนึ่งในกรณีเหล่านั้น เราชอบใช้ rebase เนื่องจากช่วยลดความซับซ้อนของประวัติสาขาที่ซับซ้อนอยู่แล้วรวมทั้งแสดงเวอร์ชันของประวัติที่สัมพันธ์กับที่เก็บที่แบ่งใช้
คุณสามารถตั้งค่า branch.autosetuprebase = always เพื่อให้ git สร้าง remote branch ของคุณโดยอัตโนมัติเป็น rebase แทน master
git config --global branch.autosetuprebase always
การตั้งค่านี้ทำให้ git สร้างการตั้งค่าคอนฟิกสำหรับแต่ละสาขาระยะไกลโดยอัตโนมัติ:
branch.<branchname>.rebase=true
คุณสามารถตั้งค่านี้ด้วยตนเองสำหรับสาขาระยะไกลที่ตั้งค่าไว้แล้ว
git config branch.<branchname>.rebase true
ฉันขอขอบคุณ @LaurensHolst สำหรับการซักถามและติดตามคำชี้แจงก่อนหน้านี้ของฉัน ฉันได้เรียนรู้เพิ่มเติมอย่างแน่นอนเกี่ยวกับวิธีการทำงานของคอมไพล์กับการดึงและผสานคอมมิต
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการกระทำผสานคุณสามารถอ่านที่เอื้อต่อการโครงการในProGit-Book ส่วนPrivate Small Teamแสดงการรวมคอมมิต
git log --no-merges