ยกเลิกการผสาน Git


122

ฉันกำลังทำโปรเจ็กต์โดยใช้ Git เป็น VCS ฉันได้รับกิ่งไม้xyzจากสาขาหลักของต้นแบบ หลังจากทำงานไประยะหนึ่งฉันก็ยอมรับรหัสของฉันและดึงสายหลักสาขา

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



คุณไม่สามารถเรียกคืนการกระทำก่อนหน้าของสาขาได้หรือไม่?
วุฒิพงษ์วงศ์สกุลเดช


1
โปรดทราบว่าใน Git revertเป็นชื่อของคำสั่งที่สร้างคอมมิตใหม่ที่ย้อนกลับการเปลี่ยนแปลงในคอมมิตก่อนหน้าดังนั้นนั่นอาจไม่ใช่คำที่คุณกำลังมองหาที่นี่ ฉันได้แก้ไขคำถามของคุณเพื่อชี้แจง
Scott Weldon

คำตอบ:


305

ตราบเท่าที่คุณไม่ได้กระทำคุณสามารถพิมพ์ได้

git merge --abort

ตามที่บรรทัดคำสั่งแนะนำ


4
ฉันได้รับข้อความนี้เมื่อลองสิ่งนี้: error: Entry 'MyFile.java' not uptodate. Cannot merge. fatal: Could not reset index file to revision 'HEAD'.
SMBiggs

1
@Ahmad git ไม่เริ่มต้นการผสานกับการเปลี่ยนแปลงที่ไม่ได้กำหนดไว้ (ของไฟล์ที่ติดตามแล้ว) git ไม่สามารถปกป้องสิ่งที่มันไม่รู้ได้
Timothy Truckle

ใช่คุณเรียนรู้มันโดยการสูญเสียรหัสของฉัน นี่คือรายละเอียดของปัญหาของฉันฉันประสบปัญหาได้อย่างไร stackoverflow.com/questions/55474092/how-to-undo-the-git-abort
Ahmad

24

หากคุณทำ "สถานะคอมไพล์" ในขณะที่มีความขัดแย้งในการผสานสิ่งแรกที่คอมไพล์จะแสดงให้คุณเห็นคือวิธียกเลิกการผสาน

ผลลัพธ์ของสถานะ git ในขณะที่มีความขัดแย้งในการผสาน


ดีสิ่งนี้แนะนำให้ฉันgit reset HEAD <file>ลบ "ผสาน" ที่ยุบได้อย่างมีประสิทธิภาพออกจากตัวควบคุมแหล่งที่มาของส่วนขยาย git => จากนั้นฉันสามารถแก้ไขข้อขัดแย้งหรือเพียงแค่ยกเลิกการเปลี่ยนแปลงของฉันในรายการส่วนขยาย GIT :)
jave.web

6

มีการบอกความจริงว่ามีแหล่งข้อมูลมากมายที่อธิบายวิธีการทำสิ่งนี้อยู่แล้วบนเว็บ:

Git: จะย้อนกลับการรวมคอมมิตได้อย่างไร?

Git: จะย้อนกลับการรวมคอมมิตได้อย่างไร?

การยกเลิกการผสานจากบล็อกของ Git (ดึงมาจาก Wayback Machine ของ archive.org)

ดังนั้นฉันเดาว่าฉันจะสรุปบางส่วนเหล่านี้:

  1. git revert <merge commit hash>
    สิ่งนี้จะสร้างคอมมิต "ย้อนกลับ" เพิ่มเติมโดยบอกว่าคุณยกเลิกการรวม

  2. git reset --hard <commit hash *before* the merge>
    ประวัติการรีเซ็ตนี้เป็นก่อนที่คุณจะทำการผสาน หากคุณได้กระทำหลังจากการรวมคุณจะต้องดำเนินการcherry-pickต่อในภายหลัง

แต่อย่างสุจริตนี้คู่มือที่นี่จะดีกว่าสิ่งที่ฉันสามารถอธิบายด้วยแผนภาพ! :)


1
ลิงค์หายไปแล้ว เฮ้อ.
SMBiggs

@ScottBiggs ผมคิดว่าพวกเขาย้ายไปgit-scm.com/book/en/v2/... เดนิสถ้าคุณอ่านข้อความนี้คุณสามารถตรวจสอบได้ไหม? และถ้ามันเหมือนกันจริงๆช่วยอัพเดทลิงค์ในคำตอบได้ไหม ขอบคุณ!
Fabio กล่าว Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.