ทั้งrebase
(และcherry-pick
) และmerge
มีข้อดีและข้อเสีย ฉันโต้แย้งmerge
ที่นี่ แต่มันก็คุ้มค่าที่จะเข้าใจทั้งคู่ (ดูที่นี่เพื่อหาคำตอบกรณีอื่นที่rebase
เป็นที่ถกเถียงกันดีระบุกรณีที่ต้องการ)
merge
เป็นที่ต้องการมากกว่าcherry-pick
และrebase
ด้วยเหตุผลสองประการ
- ความแข็งแรง ตัวระบุ SHA1 ของการกระทำเป็นการระบุว่าไม่เพียง แต่ในตัวของมันเอง แต่ยังเกี่ยวข้องกับการกระทำอื่น ๆ ทั้งหมดที่นำหน้ามัน นี่เป็นการรับประกันว่าสถานะของที่เก็บของ SHA1 ที่ระบุนั้นเหมือนกันในทุก ๆ โคลน ในทางทฤษฎีแล้วไม่มีโอกาสที่ใครบางคนทำในสิ่งที่ดูเหมือนว่าจะเป็นการเปลี่ยนแปลงแบบเดียวกัน แต่จริงๆแล้วเป็นการทำลายหรือการจี้พื้นที่เก็บข้อมูลของคุณ คุณสามารถเลือกรับเชอร์รี่ในการเปลี่ยนแปลงรายบุคคลและพวกเขามีแนวโน้มที่เหมือนกัน แต่คุณไม่รับประกัน (ในฐานะรองลงมารองลงมาคือเชอร์รี่ที่หยิบมาใหม่จะใช้พื้นที่เพิ่มขึ้นหากมีคนอื่นที่เลือกเชอร์รี่ในความมุ่งมั่นเดียวกันอีกครั้งเพราะทั้งคู่จะปรากฏตัวในประวัติศาสตร์แม้ว่าสำเนางานของคุณจะเหมือนกัน)
- สะดวกในการใช้ ผู้คนมักจะเข้าใจ
merge
กระบวนการทำงานค่อนข้างง่าย rebase
มีแนวโน้มที่จะพิจารณาขั้นสูงขึ้น เป็นการดีที่สุดที่จะเข้าใจทั้งคู่ แต่คนที่ไม่ต้องการเป็นผู้เชี่ยวชาญในการควบคุมเวอร์ชัน (ซึ่งจากประสบการณ์ของฉันได้รวมเพื่อนร่วมงานหลายคนที่ด่าดีในสิ่งที่พวกเขาทำ แต่ไม่ต้องการใช้เวลาเพิ่มเติม) ง่ายขึ้น เวลาเพียงแค่ผสาน
แม้ว่าจะมีเวิร์กโฟลว์ที่ผสานกันอย่างหนักrebase
และcherry-pick
ยังคงมีประโยชน์สำหรับบางกรณี:
- ข้อเสียอย่างหนึ่ง
merge
คือประวัติศาสตร์ที่รก rebase
ป้องกันไม่ให้คำมั่นสัญญาที่ยาวนานถูกกระจัดกระจายในประวัติศาสตร์ของคุณเช่นเดียวกับที่คุณทำหากคุณรวมการเปลี่ยนแปลงของผู้อื่นเป็นระยะ อันที่จริงแล้วมันมีวัตถุประสงค์หลักในการใช้งาน สิ่งที่คุณต้องการที่จะเป็นมากระวังคือไม่เคยที่จะrebase
รหัสที่คุณได้ใช้ร่วมกันกับที่เก็บอื่น ๆ เมื่อมีการมอบหมายpush
คนอื่นอาจจะทำสิ่งใดสิ่งหนึ่งและการทำซ้ำจะทำให้เกิดการทำซ้ำที่กล่าวถึงข้างต้น ที่เลวร้ายที่สุดคุณสามารถท้ายด้วยพื้นที่เก็บข้อมูลที่สับสนมากและข้อผิดพลาดเล็กน้อยมันจะใช้เวลานานในการคุ้ยเขี่ย
cherry-pick
มีประโยชน์สำหรับการสุ่มตัวอย่างชุดย่อยของการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ จากสาขาหัวข้อที่คุณตัดสินใจทิ้งโดยทั่วไป แต่รู้ว่ามีบางส่วนที่มีประโยชน์
สำหรับการรวมการเปลี่ยนแปลงหลาย ๆ อย่างเข้าด้วยกัน: มันง่ายกว่ามาก มันอาจเป็นเรื่องที่น่าเบื่อมากที่จะรวมการเปลี่ยนแปลงแต่ละเซ็ตเมื่อคุณเริ่มมีจำนวนมาก การรวมความละเอียดในคอมไพล์ (และใน Mercurial และในบาซาร์) ดีมาก คุณจะไม่เจอกับปัญหาสำคัญ ๆ ที่รวมสาขากิ่งใหญ่ไว้เป็นส่วนใหญ่ ฉันมักจะรวมทุกอย่างทั้งหมดในครั้งเดียวและเฉพาะในกรณีที่ฉันได้รับความขัดแย้งจำนวนมากฉันจะสำรองและเรียกใช้งานชิ้นส่วนผสานอีกครั้ง ถึงอย่างนั้นฉันก็ทำมันเป็นก้อนใหญ่ ตัวอย่างจริง ๆ ฉันมีเพื่อนร่วมงานที่มีการเปลี่ยนแปลง 3 เดือนเพื่อรวมและมีความขัดแย้ง 9000 ในฐานรหัสบรรทัด 250000 สิ่งที่เราทำในการแก้ไขคือทำการผสานมูลค่าของเดือนละครั้ง: ความขัดแย้งไม่ได้สร้างขึ้นเป็นเส้นตรงและการทำเป็นชิ้น ๆ จะส่งผลในระยะไกลความขัดแย้งน้อยกว่า 9000 มันยังคงทำงานมาก แต่ก็ไม่มากเท่าที่พยายามทำในแต่ละครั้ง