จะรับไฟล์เวอร์ชันเฉพาะใน Mercurial ได้อย่างไร?


114

ฉันยังใหม่กับ Mercurial ไม่พบคำสั่งที่ถูกต้อง พยายามอัปเดต / ชำระเงินโดยไม่มีโชค ฉันใช้ที่เก็บในเครื่อง ขอบคุณ


@Omnifarious: ฉันยอมรับไฟล์เวอร์ชันเสถียร จากนั้นทำงานกับไฟล์ต่อไป แต่ในไม่ช้าฉันก็รู้ว่าฉันต้องการเวอร์ชัน "ดี" สุดท้าย สามารถทำได้โดยการอัปเดตใน svn แต่เมื่อฉันลองอัปเดต hg มันขึ้นว่า "0 ไฟล์ ... "
Codism

คำตอบ:


153

ฉันคิดว่าคุณต้องการhg revert -r<rev> <file>(สิ่งนี้จะเปลี่ยนไฟล์นั้นให้เป็นเหมือนเดิมในการแก้ไขที่กำหนด)


ใช่นั่นคือสิ่งที่เขาต้องการ :-)
อ้อมค้อม

9
หรือเพียงแค่ hg เปลี่ยนกลับ <ชื่อไฟล์> หากคุณต้องการยกเลิกการเปลี่ยนแปลงปัจจุบันของคุณและรับข้อมูลล่าสุดที่ได้รับการยอมรับ
BlackTigerX

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

83

ดังที่ djc กล่าวว่าrevertจะแก้ไขไฟล์เพื่อให้ตรงกับการแก้ไขก่อนหน้านี้ หากคุณไม่ต้องการให้อยู่ในตำแหน่งคุณสามารถใช้hg cat -r revisionid filename(แทนรหัสการแก้ไขและชื่อไฟล์แน่นอน) ซึ่งจะส่งออกไฟล์เป็น stdout เหมาะสำหรับการเปลี่ยนเส้นทางไปยังที่ใดก็ได้ที่คุณต้องการ


4
Purrrfect สิ่งที่ฉันต้องการ
โยตา

เยี่ยมมากมันเป็นเรื่องดีเสมอที่ได้ยินอะไรแบบนั้น
Ry4an Brase

24

hg revertแก้ปัญหานี้ได้แน่นอน แต่ฉันคิดว่าคุณสับสนเกี่ยวกับสิ่งต่างๆที่กว้างกว่าแค่คำตอบสำหรับคำถามของคุณและต้องการที่จะพยายามตอบอย่างเต็มที่

hg updateเป็นคำสั่งที่เก็บทั้งหมดและจะไม่ทำงานกับไฟล์แต่ละไฟล์ มันไม่เหมือนกับการโค่นล้มsvn updateด้วยวิธีนี้ หากคุณhg --help updateเห็นว่าเป็นกรณีนี้เนื่องจากคำสั่งไม่มีอาร์กิวเมนต์ไฟล์ สามารถใช้เพื่อย้ายที่เก็บทั้งหมดของคุณไปยังสแน็ปช็อตเฉพาะ แต่ไม่สามารถใช้เพื่อทำเช่นนั้นกับไฟล์เดียวได้

หากคุณพิมพ์hg --helpคุณจะเห็นรายการคำสั่ง เป็นรายการที่ค่อนข้างใหญ่และค่อนข้างน่ากลัว แต่ถ้าคุณอ่านจบคุณจะพบบรรทัดนี้:

revert       restore individual files or directories to an earlier state

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

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

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

คุณสามารถค้นหาการแก้ไขหลัก (หรือการแก้ไขในกรณีของการผสาน) ของสำเนาการทำงานปัจจุบันโดยใช้hg parentsคำสั่ง

ในการแก้ไขการโค่นล้มเป็นความก้าวหน้าเชิงเส้นอย่างเคร่งครัด Mercurial สร้างกิ่งก้านที่ปลายหมวกและเกือบจะง่ายต่อการผสาน การแก้ไขในรูปแบบ DAG ไม่ใช่ความก้าวหน้าเชิงเส้นอย่างเคร่งครัด


13

ในการแยกการแก้ไขเฉพาะของไฟล์เฉพาะคุณสามารถทำได้บน Windows:

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"

นี่ 9 คือหมายเลขการแก้ไข

หรือดีกว่า:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"

1

มาที่นี่เพื่อพยายามรับเวอร์ชันก่อนหน้าดังนั้นนี่คือคำสั่งที่แน่นอน:

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