แทนที่ต้นแบบด้วยสาขา


1

ฉันทำหลายอย่างแล้ว จากนั้นฉันต้องกลับไปที่การกระทำที่อยู่ตรงกลาง ทำการเปลี่ยนแปลงที่นั่นและสร้างสาขาใหม่ ตอนนี้สิ่งที่ฉันต้องการจะทำคือข้าม (ลบลบ) คอมมิชชันอื่น ๆ ทั้งหมดและใช้สาขาเป็นเวอร์ชันหลัก แต่ไม่สามารถหาวิธีที่จะทำ

นี่คือคำอธิบายของสถานการณ์:

commit1 (latest)
commit2
commit3 (head pointing here)
other commits...

ตอนนี้commit3ฉันทำการเปลี่ยนแปลงและสร้างสาขาใหม่เพื่อผลักดันพวกเขา

ตอนนี้ผมอยากจะให้รุ่นสาขาเป็นหลักหนึ่งเอาและcommit2commit1


คุณต้องการที่จะทำให้สาขาใหม่ของคุณเป็นสาขาเริ่มต้นหรือต้นแบบการเปลี่ยนแปลงเพื่อให้มันมีความมุ่งมั่นเดียวกันกับที่สาขาใหม่ของคุณในปัจจุบันมี?
8bittree

@ 8bittree ฉันต้องการให้เจ้านายมีสถานะของสาขา (สถานการณ์ที่สองที่คุณอธิบายไว้)
yerzhik

นอกจากนี้คุณได้ผลักดันคอมมิชชันที่ 1 และ 2 หรือว่าพวกเขาอยู่ในท้องถิ่นเท่านั้น?
8bittree

ผลักไปแล้ว ทุกอย่างถูกผลัก
yerzhik

คำตอบ:


2

เนื่องจากคุณได้ผลักดันตัวเลือกที่มีโอกาสน้อยที่สุดที่จะทำลายสิ่งต่าง ๆ ของคุณน่าจะเป็นgit revert:

git checkout master
git revert commit1 commit2
git merge new-branch
git push

โปรดทราบว่าสิ่งนี้จะส่งผลให้ต้นแบบมีไฟล์เดียวกันกับสาขาใหม่อย่างแน่นอน แต่ commit1 และ commit2 จะยังคงอยู่ในประวัติของมาสเตอร์พร้อมกับสองคอมมิชชันเพิ่มเติมที่จะคืนค่าการเปลี่ยนแปลงของพวกเขา


ไม่แนะนำ

หากคุณต้องการลบการกระทำที่คุณได้ผลักออกจากปริญญาโทไปแล้วก่อนอื่นให้แจ้งเพื่อนร่วมทีมของคุณทุกคนว่าคุณกำลังจะทำลายสิ่งต่าง ๆ ให้ใช้git reset:

git checkout master
git reset --hard commit3
git merge new-branch
git push -f

--hardจะลบการเปลี่ยนแปลงทั้งหมดที่กระทำโดย commit1 และ commit2 จากระบบไฟล์ของคุณ คุณสามารถใช้--softเพื่อรักษาการเปลี่ยนแปลงเหล่านั้นไว้ในระบบไฟล์ในขณะที่ยังคงลบการกระทำเหล่านั้น

คุณอาจต้องการให้เพื่อนร่วมทีมชี้ไปที่เอกสารสำหรับการกู้คืนจากการรีสตรีมรีบูต (จุดรีคอมไพล์ไปที่ส่วนนั้นเมื่อพูดถึงการใช้คอมมิชชันreset --hardที่ส่งไปแล้ว)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.