จะละทิ้ง hg merge ได้อย่างไร


131

ฉันใหม่เพื่อร่วมมือกับ Mercurial สถานการณ์ของฉัน:

  • โปรแกรมเมอร์คนอื่นได้เปลี่ยน rev 1 ของไฟล์เพื่อแทนที่การเว้นวรรค 4 ช่องด้วยการเว้นวรรค 2 ช่อง (คือเปลี่ยนทุกบรรทัด) เรียกว่า rev 2 ผลักไปที่ repo ระยะไกล
  • ฉันได้ยืนยันการเปลี่ยนแปลงที่สำคัญครั้งที่ 1 ด้วยการเปลี่ยนแปลงรหัสต่างๆในพื้นที่ทำงานในท้องถิ่นของฉัน เรียกว่า rev 3
  • ฉันhg pullแก้ไขแล้วhg mergeไม่มีความคิดที่ชัดเจนว่าเกิดอะไรขึ้น
  • ความขัดแย้งนับไม่ถ้วนและไม่สำคัญจริงๆ

ดังนั้นฉันหวังว่าฉันจะเปลี่ยน repo ในพื้นที่ของฉันเป็น 2 ช่องว่างก่อนรวมเข้าด้วยกัน จากนั้นการผสานจะเป็นเรื่องเล็กน้อย (ฉันคิดว่า) แต่ฉันไม่สามารถสำรองข้อมูลได้ ฉันคิดว่าฉันต้องแต่ก็กล่าวว่าhg update -r 3abort: outstanding uncommitted merges

ฉันจะยกเลิกการรวมเปลี่ยนระยะห่างใน repo ในพื้นที่ของฉันและทำการรวมซ้ำได้อย่างไร

คำตอบ:


126

คุณสามารถละทิ้งการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดด้วยแฟล็ก -C (หรือ --clean):

hg update -C -r 3

ระวัง: ทุกอย่างที่ไม่ได้ทำจะหายไป!

หลังจากนั้นคุณควรใช้เครื่องมือฟอร์แมตเตอร์โค้ดเพื่อดำเนินการทั้งหมดหรืออย่างน้อยก็ค้นหาและแทนที่ด้วยนิพจน์ทั่วไป สิ่งที่ง่ายเหมือนการแทนที่สิ่งที่ตรงกัน^____(ใช้ 4 ช่องว่างแทนขีดล่าง) ด้วย__(2 ช่องว่าง) ทำซ้ำสองสามครั้ง (เว้นแต่คุณมีโค้ดที่ซ้อนกันอย่างไม่น่าเชื่อ) ควรทำงาน


โอ้ขอบคุณ. คุณต้องตอบถูกต้องเมื่อฉันคิดออกเอง ฉันอยู่ใน emacs M-x indent-regionเคล็ดลับ reindent ก็เช่นกัน
Grumdrig

6
น่าสังเกตว่าไฟล์ที่ไม่ได้ติดตามจะไม่ถูกลบออก
djsutho

132

BTW: ถ้าคุณเพียงแค่คืนค่าผสานที่คุณทำและ 3 ไม่ใช่หมายเลขการแก้ไขของคุณคุณสามารถทำได้:

hg update -C -r .

24
สำหรับใครก็ตามที่ชอบฉันในตอนแรกไม่เข้าใจวิธีการทำงาน: จุด.เป็นทางลัดไปสู่การแก้ไขก่อนหน้า
Jeroen Wiert Pluimers

1
คำตอบที่ดี! น่าจะดีที่สุด
Oleg Abrazhaev

1
@Thymine: จากที่hg help updateฉันได้รับ: หากไม่ได้ระบุเซ็ตการแก้ไขให้อัปเดตที่ปลายสาขาที่มีชื่อในปัจจุบัน ...และเคล็ดลับอาจไม่ใช่การแก้ไขปัจจุบันของคุณที่คุณกำลังทำอยู่ ฉันไม่ได้ทดสอบจนถึงตอนนี้ ..
คณิตศาสตร์

1
อานั่นเป็นรายละเอียดที่ดีที่จะรู้ ... จริง ๆ แล้วฉันจะลบความคิดเห็นของฉันที่อ้างว่าการลาออก-r .เหมือนกัน
Thymine

ง่ายและมีประโยชน์มาก
Naveen Kumar V

33

หากต้องการยกเลิกการรวมที่ไม่ผูกมัดให้ใช้

hg update --clean

ซึ่งจะตรวจสอบสำเนาที่สะอาดของพาเรนต์ผสานเดิมซึ่งสูญเสียการเปลี่ยนแปลงทั้งหมด


2

เห็นได้ชัดว่าฉันแค่ต้องการที่จะhg update -C -r 3เขียนทับไฟล์ท้องถิ่นของฉันด้วย rev ในใจ (ซึ่งเป็นสิ่งที่ฉันคิดว่าhg updateจะทำ แต่ฉันผิด) ขอบคุณสำหรับความช่วยเหลือของฉัน!


2
การเพิ่ม-Cหรือ--cleanเป็นวิธีที่คุณสั่งให้ Mercurial ก้าวไปข้างหน้าแม้ว่ามันจะทิ้งไฟล์ที่ถูกแก้ไขไปแล้วก็ตาม คุณถูกที่hg update -r Xปกติจะนำคุณไปสู่การแก้ไข X แต่เมื่อคุณอยู่ในการรวมคุณต้องยืนยันอีกเล็กน้อย :-)
Martin Geisler

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