คุณรวม ที่จริงแล้วค่อนข้างง่ายและการดำเนินงานในท้องถิ่นอย่างสมบูรณ์แบบ:
git checkout b1
git merge master
# repeat for b2 and b3
สิ่งนี้ทำให้ประวัติตรงตามที่เกิดขึ้น: คุณแยกจากต้นแบบคุณทำการเปลี่ยนแปลงทุกสาขาและในที่สุดคุณก็รวมการเปลี่ยนแปลงจากต้นแบบเข้ากับสาขาทั้งสาม
gitสามารถจัดการกับสถานการณ์นี้ได้ดีจริงๆมันถูกออกแบบมาสำหรับการรวมที่เกิดขึ้นในทุกทิศทางในเวลาเดียวกัน คุณสามารถเชื่อถือได้ว่าสามารถรวมเธรดทั้งหมดได้อย่างถูกต้อง มันก็ไม่สนใจว่าสาขาb1ผสานmasterหรือmasterผสานb1ผสานกระทำลักษณะเหมือนกันทั้งหมดจะคอมไพล์ ความแตกต่างเพียงอย่างเดียวคือสาขาใดจบลงที่ชี้ไปที่การรวมการกระทำนี้
คุณ rebase ผู้ที่มี SVN หรือพื้นหลังที่คล้ายกันพบว่าใช้งานง่าย คำสั่งนั้นคล้ายกับกรณีการผสาน:
git checkout b1
git rebase master
# repeat for b2 and b3
คนชอบวิธีนี้เพราะมันเก็บประวัติเชิงเส้นในทุกสาขา อย่างไรก็ตามประวัติเชิงเส้นนี้เป็นเรื่องโกหกและคุณควรระวังว่ามันเป็น พิจารณากราฟการกระทำนี้:
A --- B --- C --- D <-- master
\
\-- E --- F --- G <-- b1
ผลการผสานในประวัติศาสตร์ที่แท้จริง:
A --- B --- C --- D <-- master
\ \
\-- E --- F --- G +-- H <-- b1
อย่างไรก็ตามการ rebase ทำให้คุณมีประวัตินี้:
A --- B --- C --- D <-- master
\
\-- E' --- F' --- G' <-- b1
ประเด็นก็คือว่ากระทำE', F'และG'ไม่เคยมีอยู่อย่างแท้จริงและมีแนวโน้มที่ไม่เคยได้รับการทดสอบ พวกเขาอาจไม่ได้รวบรวม มันเป็นจริงค่อนข้างง่ายต่อการสร้างกระทำไร้สาระผ่าน rebase โดยเฉพาะอย่างยิ่งเมื่อมีการเปลี่ยนแปลงในมีความสำคัญต่อการพัฒนาในmasterb1
ผลที่ตามมาของเรื่องนี้อาจจะเป็นว่าคุณไม่สามารถแยกแยะความแตกต่างที่ของทั้งสามกระทำE, Fและแนะนำจริงถดถอยลดน้อยลงค่าของGgit bisect
git rebaseผมไม่ได้บอกว่าคุณไม่ควรใช้ มันมีประโยชน์ แต่เมื่อใดก็ตามที่คุณใช้มันคุณจะต้องตระหนักถึงความจริงที่ว่าคุณโกหกเกี่ยวกับประวัติศาสตร์ และอย่างน้อยคุณควรทดสอบคอมมิทใหม่