คุณรวม ที่จริงแล้วค่อนข้างง่ายและการดำเนินงานในท้องถิ่นอย่างสมบูรณ์แบบ:
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 โดยเฉพาะอย่างยิ่งเมื่อมีการเปลี่ยนแปลงในมีความสำคัญต่อการพัฒนาในmaster
b1
ผลที่ตามมาของเรื่องนี้อาจจะเป็นว่าคุณไม่สามารถแยกแยะความแตกต่างที่ของทั้งสามกระทำE
, F
และแนะนำจริงถดถอยลดน้อยลงค่าของG
git bisect
git rebase
ผมไม่ได้บอกว่าคุณไม่ควรใช้ มันมีประโยชน์ แต่เมื่อใดก็ตามที่คุณใช้มันคุณจะต้องตระหนักถึงความจริงที่ว่าคุณโกหกเกี่ยวกับประวัติศาสตร์ และอย่างน้อยคุณควรทดสอบคอมมิทใหม่