ดูกราฟการกระทำของคุณ (พร้อม gitk หรือโปรแกรมที่คล้ายกัน) คุณจะเห็นคอมมิชชันจากคำขอการดึงและคุณจะเห็นคอมมิทของคุณเองและการคอมมิชชันรวม (ถ้าไม่ใช่การผสานแบบกรอไปข้างหน้า) คุณเพียงแค่ต้องค้นหาการกระทำสุดท้ายของตัวคุณเองก่อนทำการผสานและรีเซ็ตสาขาให้เป็นการกระทำนี้
(ถ้าคุณมี reflog ของสาขามันจะง่ายกว่าถ้าหาคอมมิทก่อนการรวม)
(แก้ไขหลังจากข้อมูลเพิ่มเติมในความคิดเห็น :)
เอาล่ะมาดูกราฟกัน:
ฉันถือว่าการกระทำครั้งสุดท้าย (ขวาสุด) เป็นการรวมที่ไม่ถูกต้องของคุณด้วยคำขอดึงซึ่งผสานเส้นสีน้ำเงินที่เห็นที่นี่ ความมุ่งมั่นสุดท้ายของคุณจะเป็นสิ่งที่เกิดขึ้นก่อนหน้านี้บนเส้นสีดำโดยที่นี่จะมีเครื่องหมายสีแดง:
รีเซ็ตการกระทำนี้และคุณควรจะดี
ซึ่งหมายความว่าในสำเนาการทำงานในพื้นที่ของคุณทำสิ่งนี้ (หลังจากตรวจสอบให้แน่ใจว่าคุณไม่มีสิ่งใดที่ปราศจากข้อผูกมัดเช่น git stash):
git checkout master
git reset --hard 7a62674ba3df0853c63539175197a16122a739ef
gitk
ตอนนี้ยืนยันว่าคุณอยู่ในความมุ่งมั่นที่ฉันทำเครื่องหมายไว้ที่นั่นและคุณจะไม่เห็นสิ่งที่ถูกดึงในบรรพบุรุษของมัน
git push -f origin master
(หากรีโมต Github ของคุณชื่อorigin
- มิฉะนั้นให้เปลี่ยนชื่อ)
ตอนนี้ทุกอย่างควรดูขวาบน GitHub เช่นกัน ความมุ่งมั่นจะยังคงอยู่ในที่เก็บของคุณ แต่ไม่สามารถเข้าถึงได้โดยสาขาใด ๆ ดังนั้นจึงไม่ควรทำอันตรายใด ๆ ที่นั่น (และพวกเขาจะยังอยู่ในที่เก็บของ RogerPaladin แน่นอน)
(อาจมีวิธีการเฉพาะเว็บ Github เฉพาะในการทำสิ่งเดียวกัน แต่ฉันไม่คุ้นเคยกับ Github และระบบการจัดการคำขอดึงข้อมูลของมันเกินไป)
โปรดทราบว่าหากใครคนใดคนหนึ่งอาจดึงเจ้านายของคุณด้วยการกระทำผิดพวกเขาก็มีปัญหาเช่นเดียวกับที่คุณมีอยู่ในปัจจุบันและไม่สามารถมีส่วนร่วมจริงๆ ก่อนรีเซ็ตเป็นเวอร์ชันต้นแบบใหม่ของคุณ
หากเป็นไปได้ว่าสิ่งนี้เกิดขึ้นหรือคุณเพียงแค่ต้องการหลีกเลี่ยงปัญหาใด ๆ ให้ใช้git revert
คำสั่งแทนgit reset
เพื่อย้อนกลับการเปลี่ยนแปลงด้วยคอมมิตใหม่แทนที่จะตั้งค่ากลับไปเป็นเวอร์ชันเก่ากว่า (บางคนคิดว่าคุณไม่ควรทำการรีเซ็ตด้วยสาขาที่เผยแพร่) ดูคำตอบสำหรับคำถามนี้เกี่ยวกับวิธีการทำเช่นนี้
สำหรับอนาคต:
หากคุณต้องการเพียงบางส่วนของกระทำของสาขา RogerPaladin ฯ พิจารณาใช้แทนcherry-pick
merge
หรือสื่อสารกับ RogerPaladin เพื่อย้ายไปยังสาขาอื่นและส่งคำขอดึงใหม่