ฉันได้พัฒนาฟีเจอร์ใหม่ในสาขาใหม่และที่ด้านข้างมีการเปลี่ยนแปลงเล็กน้อยในสาขาหลักของฉัน
เป็นไปได้หรือไม่ที่จะรวมสาขาหลักเข้ากับสาขาใหม่ของฉันเพื่อให้ทันสมัยเพื่อที่ฉันจะได้ไม่เกิดข้อขัดแย้งในการรวมจำนวนมากเกินไปเมื่อคุณสมบัติใหม่เสร็จสิ้น
ฉันได้พัฒนาฟีเจอร์ใหม่ในสาขาใหม่และที่ด้านข้างมีการเปลี่ยนแปลงเล็กน้อยในสาขาหลักของฉัน
เป็นไปได้หรือไม่ที่จะรวมสาขาหลักเข้ากับสาขาใหม่ของฉันเพื่อให้ทันสมัยเพื่อที่ฉันจะได้ไม่เกิดข้อขัดแย้งในการรวมจำนวนมากเกินไปเมื่อคุณสมบัติใหม่เสร็จสิ้น
คำตอบ:
คุณสามารถgit merge masterหรือgit rebase masterในกรณีนี้ผมต้องการrebase คอมไพล์
เพราะgit rebaseทำให้มันราวกับว่าการเปลี่ยนแปลงในสาขาคุณลักษณะที่ทำอยู่ด้านบนของการเปลี่ยนแปลงในสาขาหลักซึ่งทำให้กราฟรุ่นง่ายขึ้น
การยกตัวอย่างเช่นจากคู่มือการคอมไพล์ rebase , git rebase masterสาขาfeature:
A---B---C feature A'--B'--C' feature
/ --rebase--> /
D---E---F---G master D---E---F---G master
อย่างไรก็ตามgit rebaseจะเหมาะสมเมื่อสาขาไม่ได้ถูกกระจายเท่านั้นหรือจะมีความสับสนและการทำงานพิเศษต่อเนื่องเนื่องจากตอนเก่า A, B, C ถูกแทนที่ด้วยคอมมิทใหม่ A 'B', C 'และ F และ G ที่ไม่เคยมีมาก่อน
ผลลัพธ์ที่แท้จริงหลังจากgit rebase masterอยู่ในสาขาfeatureคือ:
( A---B---C )
/
/ A'--B'--C' feature
/ /
D---E---F---G master
commits A, B, C จะห้อยหลังจาก rebase git reflog featureแต่จะผ่านเข้าถึงได้
หากมีใครดึงสาขาของคุณหรือคุณผลักไปที่ไหนสักแห่งคุณควรรวมเข้าไปในสาขานั้นแทนเพื่อหลีกเลี่ยงความสับสนและทำงานพิเศษในส่วนอื่น ๆ ดูการกู้คืนจาก rebase
นี่คือผลลัพธ์ของgit merge masterในสาขาfeature:
A---B---C feature A---B---C---M feature
/ --merge--> / ,---’
D---E---F---G master D---E---F---G master
หรือหากคุณgit merge featureอยู่ในสาขาmasterก็จะมีลักษณะเช่นนี้:
A---B---C feature A---B---C feature
/ --merge--> / \
D---E---F---G master D---E---F---G---M master
git rebase masterและมันจะ "รีบูต" การเปลี่ยนแปลงในฟีเจอร์สาขาเพื่อให้พวกเขา "อิง" กับการเปลี่ยนแปลงในสาขาหลัก หากการเปลี่ยนแปลงในสาขาหลักขัดแย้งกับการเปลี่ยนแปลงในฟีเจอร์สาขา git จะขอให้คุณแก้ไขและดำเนินการต่อข้ามหรือยกเลิก หากคุณไม่แน่ใจคุณสามารถเช็คเอาต์สาขาทดสอบเพื่อลองด้วยgit checkout -b test-feature feature(สมมติว่าฟีเจอร์สาขาของคุณชื่อ "ฟีเจอร์")
git rebaseควรจะใช้เฉพาะในกรณีที่สาขาไม่ได้รับการกระจายซึ่งฉันคิดว่าเป็นกรณีเนื่องจากคุณบอกว่ามันเป็นสาขาใหม่ขออภัยเกี่ยวกับเรื่องนี้ ดูที่การกู้คืนจากการรีสตรีม rebaseในเอกสารที่ฉันลิงก์ไว้ คุณจะต้องใช้git mergeแทน และคุณสามารถใช้git reflogเพื่อค้นหาส่วนหัวสาขาฟีเจอร์ก่อนหน้าของคุณหากคุณต้องการเรียกคืน