วิธีเลิกทำการคอมไพล์ผสานกับข้อขัดแย้ง


785

mybranch1ฉันอยู่ในสาขา mybranch2ถูกแยกออกจากกันmybranch1และมีการเปลี่ยนแปลงเกิดmybranch2ขึ้น

จากนั้นในขณะที่mybranch1ฉันได้ทำgit merge --no-commit mybranch2 มันแสดงให้เห็นว่ามีความขัดแย้งในขณะที่ผสาน

ตอนนี้ฉันต้องการทิ้งทุกอย่าง ( mergeคำสั่ง) เพื่อที่mybranch1จะกลับไปเหมือนเดิม ฉันไม่รู้ว่าฉันจะทำอย่างไรเกี่ยวกับเรื่องนี้


คำตอบ:


1355

Git ล่าสุด:

git merge --abort

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

ก่อนหน้าเวอร์ชัน 1.7.4:

git reset --merge

นี่คือไวยากรณ์ที่เก่ากว่า แต่ทำเช่นเดียวกับข้างบน

ก่อนหน้าเวอร์ชัน 1.6.2:

git reset --hard

ซึ่งจะลบการเปลี่ยนแปลงที่ไม่ได้รับการยอมรับทั้งหมดรวมถึงการรวมที่ไม่ผูกมัด บางครั้งพฤติกรรมนี้มีประโยชน์แม้ใน Git เวอร์ชันใหม่ที่สนับสนุนคำสั่งด้านบน


1
แต่สำหรับคอมไพล์รุ่นเก่านี่เป็นวิธีการใช้งาน
Anshul

7
บางครั้งคุณยังจำเป็นต้องใช้git reset --mergeแม้ในเวอร์ชันที่ใหม่กว่า ฉันมีgit merge --abortข้อผิดพลาด (ไม่มีการเปลี่ยนแปลง) เมื่อgit reset --mergeสำเร็จ (และทำสิ่งที่ถูกต้อง) ใน git 2.2.1
Theodore Murdock

ฉันพบว่าฉันต้องทำgit merge --abortตามด้วยgit reset --mergeเมื่อมีข้อขัดแย้งอัตโนมัติจากการหยุดซ่อน
พ่อครัวฟาโรห์

1
มักจะใช้git merge --abortงานได้สำหรับฉัน แต่ฉันพบว่าตัวเองอยู่ในสถานการณ์ที่ฉันเช็คเอาท์ในสถานะ HEAD เดี่ยวและหนึ่งในไฟล์ของฉันมีสถานะ "ทั้งปรับเปลี่ยน" ผมอยากที่จะทิ้งทุกอย่างและได้รับกลับไปที่สาขาผมต้องgit reset --hard, git merge --abortบอกผมว่ามีการผสานการยกเลิกไม่มี (MERGE_HEAD หายไป)
yano

บางครั้งgit merge --abortไม่สามารถนำคุณกลับสถานะก่อนหน้าของคุณและในกรณีนั้น "ไวยากรณ์เก่า" git reset --hardทำเคล็ดลับ
Kevin Stewart

130

ที่จริงแล้วมันเป็นสิ่งที่ควรค่าแก่การสังเกตซึ่งgit merge --abortเทียบเท่ากับgit reset --mergeที่MERGE_HEADมีอยู่ในปัจจุบันเท่านั้น สามารถอ่านได้ในวิธีใช้ git สำหรับคำสั่งผสาน

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.

หลังจากที่มีการผสานล้มเหลวเมื่อไม่มีMERGE_HEADการผสานล้มเหลวสามารถยกเลิกได้ด้วยgit reset --mergeแต่ไม่จำเป็นต้องมีgit merge --abort, ดังนั้นพวกเขาจะไม่เพียง แต่ไวยากรณ์เก่าและใหม่สำหรับสิ่งเดียวกัน

โดยส่วนตัวแล้วฉันพบว่าgit reset --mergeมีประโยชน์มากขึ้นในการทำงานประจำวัน


2
ขอบคุณข้อมูลนี้มีประโยชน์มาก ฉันมีการรวมที่เริ่มต้นgit stash applyจากสาขาที่ผิดและgit merge --abortไม่ได้ทำอะไรเลย (ไม่MERGE_HEAD) ในขณะที่git reset --mergeทำเคล็ดลับ
geomaster

4
ฉันเคยเห็นคนประมาณ 10 คนที่บอกว่าgit merge --abortเป็นคำสั่งใหม่สำหรับgit reset --mergeฉันและฉันพบปัญหาเดียวกันกับ @geomaster นี่เป็นประโยชน์อย่างมาก!
Tom

106

สมมติว่าคุณกำลังใช้คอมไพล์รุ่นล่าสุด

git merge --abort

ตกลงนี้ใช้ไม่ได้กับ 1.7.0.7 :( ต้องใช้การตั้งค่าใหม่อีกครั้ง - ยากที่จะใช้
Anshul

5

มีสองสิ่งที่คุณสามารถทำได้ก่อนเลิกทำการผสานโดยคำสั่ง

git merge --abort

หรือ

คุณสามารถไปยังสถานะกระทำก่อนหน้าของคุณชั่วคราวโดยคำสั่ง

git checkout 0d1d7fc32 

0

Sourcetree

หากคุณไม่ยอมรับการผสานให้คลิกสองครั้งที่สาขาอื่น (= checkout) และเมื่อ sourcetree ถามคุณเกี่ยวกับการยกเลิกการเปลี่ยนแปลงทั้งหมดแล้วก็เห็นด้วย

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