ฉันได้พัฒนาฟีเจอร์ใหม่ในสาขาใหม่และที่ด้านข้างมีการเปลี่ยนแปลงเล็กน้อยในสาขาหลักของฉัน
เป็นไปได้หรือไม่ที่จะรวมสาขาหลักเข้ากับสาขาใหม่ของฉันเพื่อให้ทันสมัยเพื่อที่ฉันจะได้ไม่เกิดข้อขัดแย้งในการรวมจำนวนมากเกินไปเมื่อคุณสมบัติใหม่เสร็จสิ้น
ฉันได้พัฒนาฟีเจอร์ใหม่ในสาขาใหม่และที่ด้านข้างมีการเปลี่ยนแปลงเล็กน้อยในสาขาหลักของฉัน
เป็นไปได้หรือไม่ที่จะรวมสาขาหลักเข้ากับสาขาใหม่ของฉันเพื่อให้ทันสมัยเพื่อที่ฉันจะได้ไม่เกิดข้อขัดแย้งในการรวมจำนวนมากเกินไปเมื่อคุณสมบัติใหม่เสร็จสิ้น
คำตอบ:
คุณสามารถ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
เพื่อค้นหาส่วนหัวสาขาฟีเจอร์ก่อนหน้าของคุณหากคุณต้องการเรียกคืน