ดังนั้นฉันจึงทำผิดพลาดครั้งใหญ่ ฉันสร้างคอมมิชชัน, ดึง, ผสาน (แต่ทำให้รหัสสับสนระหว่างที่ทำเช่นนั้น) จากนั้นผลัก ฉันต้องการที่จะทำซ้ำที่ผสานและได้รับรหัสที่ถูกต้อง มีวิธีการทำเช่นนี้?
ฉันใช้ bitbucket
ดังนั้นฉันจึงทำผิดพลาดครั้งใหญ่ ฉันสร้างคอมมิชชัน, ดึง, ผสาน (แต่ทำให้รหัสสับสนระหว่างที่ทำเช่นนั้น) จากนั้นผลัก ฉันต้องการที่จะทำซ้ำที่ผสานและได้รับรหัสที่ถูกต้อง มีวิธีการทำเช่นนี้?
ฉันใช้ bitbucket
คำตอบ:
ไม่แน่ใจว่านี่เป็นวิธี "อวยพร" หรือไม่ แต่นี่คือสิ่งที่ฉันทำเพื่อแก้ไขปัญหาเดียวกันโดยไม่ต้องกด "บังคับ" หรืออะไรทำนองนั้น
สมมติว่าประวัติของคุณมีลักษณะเช่นนี้ (และ M เป็นผสานผสาน):
-A--B--C--M (master points here)
\ /
D----E
การทำงานgit checkout -b merge_fix <commit ID E>
สร้างสาขาก่อนที่เราจะทำผิดพลาด:
-A--B--C--M (master points here)
\ /
D----E (HEAD and merge_fix point here)
ทีนี้มารวมกันที่สาขาใหม่ของเรา เราไม่สามารถรวมเข้าด้วยกันได้master
ดังนั้นเราต้องเลือกการกระทำด้วยตนเองก่อนที่จะทำการรวมที่ไม่ดี: git merge <commit ID C>
อย่าทำผิดพลาดแบบเดียวกับที่คุณทำครั้งสุดท้าย!
-A--B--C--M (master points here)
\ X
D----E-G (HEAD and merge_fix point here)
สมมติว่าคอมมิชชันG
ดูดีตอนนี้เราต้องการซิงค์กับส่วนบนของmaster
สาขา คำสั่งนี้บอกให้คอมไพล์เพิกเฉยต่อการเปลี่ยนแปลงที่เกิดขึ้นกับต้นแบบและบังคับให้การเปลี่ยนแปลงของเรากลายเป็นผลการผสาน:git merge -s ours master
-A--B--C--M (master points here)
\ X \
D----E-G--H (HEAD and merge_fix point here)
สุดท้าย (สมมติว่าการคอมมิชชันนั้นH
ดูดีอีกครั้งเราต้องการส่งต่ออย่างรวดเร็วmaster
เพื่อรวมการผสานถาวรของเรา:
git checkout master
git merge merge_fix
นี่เป็นเพียงการย้ายmaster
ตัวชี้ไปที่สาขาH
แต่ฉันจะใช้โอกาสนี้เพื่อล้างค่า ASCII art ของฉัน:
-A--B--C--M--H (HEAD, master, and merge_fix all point here)
\ X /
D----E--G
และคุณมีมัน! คุณทำการผสานอีกครั้งสำเร็จโดยไม่ทำให้ประวัติถูกต้อง!
คุณสามารถทำได้เช่นนี้
นั่นคือ:
git reset --hard SHA1
git merge branchname
git commit
git push --force remotename branchname
เพียงจำไว้ว่าgit push --force
จะเขียนสิ่งที่คุณมีที่สาขาระยะไกลและคนอื่น ๆ ที่ใช้สาขานั้นอาจได้รับผลกระทบจากเรื่องนี้เช่นกัน (โดยปกติคุณไม่ควรทำเช่นนี้)
git push --force
ไม่ปลอดภัย
git merge --abort
จากนั้นคุณสามารถรวมอีกครั้ง
โปรดตรวจสอบความหวังนี้ว่ามีประโยชน์สำหรับคุณ
https://www.kernel.org/pub/software/scm/git/docs/howto/revert-branch-rebase.html