ฉันต้องการให้มุมมองที่แตกต่างกันเกี่ยวกับความหมายของ "git pull --rebase" จริง ๆ เพราะดูเหมือนว่าจะหายไปในบางครั้ง
หากคุณเคยใช้ Subversion (หรือ CVS) คุณอาจคุ้นเคยกับพฤติกรรมของ "svn update" หากคุณมีการเปลี่ยนแปลงที่จะคอมมิทและการคอมมิทล้มเหลวเนื่องจากมีการทำการอัปเดตอัปสตรีมคุณ "svn update" การโค่นล้มได้มาจากการรวมการเปลี่ยนแปลงต้นน้ำกับคุณซึ่งอาจทำให้เกิดความขัดแย้ง
สิ่งที่การโค่นล้มเพียงแค่ทำคือ "pull --rebase" เป็นหลัก การกำหนดรูปแบบการเปลี่ยนแปลงในท้องถิ่นของคุณให้สัมพันธ์กับเวอร์ชันที่ใหม่กว่าคือส่วน "การรีบูต" ของมัน หากคุณทำ "svn diff" ก่อนที่จะพยายามส่งข้อมูลที่ล้มเหลวและเปรียบเทียบผลต่างกับผลลัพธ์ของ "svn diff" หลังจากนั้นความแตกต่างระหว่างทั้งสอง diffs คือการดำเนินการรีบูต
ความแตกต่างที่สำคัญระหว่าง Git และการโค่นล้มในกรณีนี้คือในการโค่นล้มการเปลี่ยนแปลง "ของคุณ" มีอยู่เป็นการเปลี่ยนแปลงที่ไม่ได้ทำในสำเนาการทำงานของคุณในขณะที่ Git คุณมีการกระทำจริงในท้องถิ่น กล่าวอีกนัยหนึ่งใน Git คุณได้แยกประวัติศาสตร์ ประวัติและประวัติต้นน้ำของคุณแตกต่างกันไป แต่คุณมีบรรพบุรุษร่วมกัน
ในความคิดของฉันในกรณีปกติของการมีสาขาในประเทศของคุณก็สะท้อนให้เห็นถึงสาขาต้นน้ำและทำพัฒนาอย่างต่อเนื่องในนั้นสิ่งที่ถูกต้องที่จะทำอยู่เสมอ "--rebase" เพราะนั่นคือสิ่งที่คุณกำลังหมายจริงทำ คุณและคนอื่น ๆ กำลังแฮ็คข้อมูลประวัติเชิงเส้นของสาขา ความจริงที่ว่ามีคนอื่นดันขึ้นเล็กน้อยก่อนที่จะพยายามผลักดันคุณนั้นไม่เกี่ยวข้องและดูเหมือนว่าจะไม่เป็นผลดีต่อการเกิดอุบัติเหตุในแต่ละครั้งของการจับเวลาเพื่อให้เกิดการรวมตัวในประวัติศาสตร์
หากคุณรู้สึกว่าจำเป็นต้องมีบางสิ่งบางอย่างเพื่อเป็นสาขาไม่ว่าด้วยเหตุผลใดก็ตามนั่นเป็นข้อกังวลที่แตกต่างกันในความเห็นของฉัน แต่ถ้าคุณไม่มีความปรารถนาที่เฉพาะเจาะจงและกระตือรือร้นที่จะแสดงการเปลี่ยนแปลงของคุณในรูปแบบของการผสานพฤติกรรมเริ่มต้นควรจะเป็น "git pull --rebase"
โปรดพิจารณาผู้อื่นที่จำเป็นต้องสังเกตและเข้าใจประวัติโครงการของคุณ คุณต้องการประวัติศาสตร์ที่ทิ้งกระจุยกระจายไปกับการรวมกันหลายร้อยแห่งทั่วสถานที่หรือคุณต้องการเพียงการผสมผสานไม่กี่อย่างที่เลือกซึ่งแสดงถึงการรวมที่แท้จริงของความพยายามในการพัฒนาที่แตกต่างกันโดยเจตนา?