มีวิธีการกู้คืนจาก "svn revert" โดยบังเอิญหรือไม่?


97

เมื่อเช้านี้ฉันสามารถยิงตัวเองได้ด้วยการทำสิ่งต่อไปนี้:

  1. เริ่มดำเนินการเปลี่ยนแปลงโครงการของฉัน
  2. ทำการแก้ไขหลายไฟล์หลายไฟล์
  3. ตระหนักว่าแนวทางของฉันผิดทั้งหมดและฉันต้องเริ่มต้นใหม่
  4. cd ไปที่ระดับบนสุดของโปรเจ็กต์ของฉันและทำ "svn --recursive revert" เพื่อกู้คืนแซนด์บ็อกซ์ในเครื่องของฉันกลับสู่สถานะก่อนการเปลี่ยนแปลง
  5. ร้องโหยหวนด้วยความสยดสยองเมื่อฉันตระหนักว่ามีการเปลี่ยนแปลงอื่น ๆ อีกมากมายที่ค้างอยู่ในแซนด์บ็อกซ์ในพื้นที่ของฉันและฉันเพิ่งลบมันไปทั้งหมด (เซิร์ฟเวอร์ svn หยุดทำงานเมื่อวันศุกร์ที่แล้วดังนั้นฉันจึงไม่สามารถเช็คอินได้และฉันก็ลืมพวกเขาไปในช่วงสุดสัปดาห์)

โชคดีในกรณีนี้ฉันได้ทำการ "svn diff> temp.txt" ก่อนออกจากงานในวันศุกร์และไฟล์ temp.txt ยังอยู่ในฮาร์ดไดรฟ์ของฉันดังนั้นฉันจึงสามารถป้อนไฟล์นั้นลงใน "โปรแกรมแก้ไข" และกู้คืน การเปลี่ยนแปลงที่หายไป

แต่สำหรับการอ้างอิงในอนาคตของฉัน (เช่นในครั้งต่อไปที่ฉันทำผิดพลาดแบบเดิม ๆ ) ... มีวิธีใดที่จะบอกให้ svn เลิกทำการ "svn revert" ได้หรือไม่? svn เก็บข้อมูลสำรองของเครื่องใน / ไม่ได้เช็คอินแตกต่างจากที่ใดหรือไม่


34
IIRC TortoiseSVN ย้ายไฟล์ที่เปลี่ยนกลับไปยังถังรีไซเคิล แต่ไคลเอนต์บรรทัดคำสั่ง SVN ดั้งเดิมไม่มีความแตกต่างดังกล่าว
Dario Solera

1
ฉันไม่พบไฟล์ในถังรีไซเคิล ฉันโชคไม่ดี?
dalcantara

5
ความคิดเห็นยอดนิยมเกี่ยวกับถังรีไซเคิล นั่นเพิ่งช่วยวันของฉัน!
OrganicPanda

2
ของฉันด้วย! ขอบคุณมาก. ไฟล์ที่เปลี่ยนกลับเพิ่งปรากฏในถังรีไซเคิลของฉันและสามารถกู้คืนได้
sladda

1
คุณเพิ่งบันทึกด้านหลังของฉันด้วยถังรีไซเคิลนี้ !!!
Epirocks

คำตอบ:


81

ไม่มี (อย่าง) NO

หากคุณพูดถึงการโค่นล้มมันควรจะคืนค่าไฟล์การเปลี่ยนแปลงทั้งหมดจะหายไปจากสายลม

มีเพียงความทรงจำของคุณเท่านั้นที่สามารถนำกลับมาได้

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

ข้อยกเว้นของแพลตฟอร์ม / ซอฟต์แวร์:การใช้ TortoiseSVN บน Windows การย้อนกลับจะโยนไฟล์ลงในถังรีไซเคิลก่อนแล้วจึงย้อนกลับ คุณสามารถขุดลงในถังรีไซเคิลเพื่อกู้คืนไฟล์


10
ภาคผนวกข้างต้น: การควบคุมเวอร์ชันจะช่วยคุณได้ก็ต่อเมื่อคุณยอมรับไฟล์จริงๆ หากคุณอยู่ในสถานะที่การฆ่าสำเนางานของคุณจะฆ่าชั่วโมงการทำงานแสดงว่าคุณไม่ได้ทำงานบ่อยพอ
myron-semack

1
ตกลง ... ในกรณีนี้เซิร์ฟเวอร์ svn หยุดทำงานและนั่นคือสาเหตุที่ฉันมีการเปลี่ยนแปลงที่ยังไม่ได้ดำเนินการที่ยังคงรอดำเนินการ : ^ (
Jeremy Friesner

13
ใช่!!! มีวิธีการกู้คืนขึ้นอยู่กับ O / S และ / หรือ IDE ของคุณ - อ่านคำตอบอื่น ๆ ด้านล่างก่อนที่คุณจะหัวใจวาย !!
HDave

2
ไม่เป็นความจริงมันซับซ้อนกว่า NO ธรรมดาเล็กน้อย ใช้เครื่องมือการกู้คืนหรือถ้าคุณโชคดีไฟล์อยู่ในถังรีไซเคิล
RaphMclee

1
@RalphMclee: ขึ้นอยู่กับแพลตฟอร์มและไคลเอนต์ svn TortoiseSVN จะบันทึกไฟล์ใหม่ที่เปลี่ยนกลับในถังรีไซเคิล นี่เป็นเพียงข้อยกเว้น และฉันสงสัยว่าเครื่องมือการกู้คืนอาจสร้างการเปลี่ยนแปลงของไฟล์ของคุณใหม่ในลักษณะที่สอดคล้องกัน จำได้ง่ายและชัดเจนกว่ามาก: การย้อนกลับจะทำลายงานของคุณใช้อย่างระมัดระวัง!
Peter Parker

104

มีวิธีแก้ไข ... ไปที่ถังรีไซเคิลของคุณคุณจะพบไฟล์ที่ถูกลบเวอร์ชันล่าสุด เต่า "โยน" ไปที่ถังรีไซเคิลทุกไฟล์ที่จะเปลี่ยนกลับ


2
อนึ่งนี่เป็นสาเหตุที่ TortoiseSVN ดูช้ามากเมื่อทำการย้อนกลับ การย้ายไฟล์ไปยังถังรีไซเคิลเป็นการดำเนินการที่ช้ามากเมื่อถังรีไซเคิลเต็ม คุณสามารถปิดใช้งานคุณสมบัตินี้ได้ในการตั้งค่า "General - dialogs 1" TortoiseSVN
Wim Coenen

8
ขอบคุณมากคุณช่วยฉันไว้! ฉันทำ Revert โดยไม่ได้ตั้งใจและเกือบจะเสียงาน 2 สัปดาห์ โชคดีที่ฉันพบมันในถังรีไซเคิล
Arie Livshin

2
@ArieLivshin ทำไมคุณถึงทำงานเป็นเวลา 2 สัปดาห์โดยไม่ได้กระทำ? ดูเหมือนว่าคุณต้องเรียนรู้เพิ่มเติมเกี่ยวกับสาขาต่างๆ
JoelFan

ankhsvn ที่น่ารำคาญไม่ได้ทำเช่นนี้
Phil Hale

ขอบคุณ.. มากช่วยเต็มที่.
Prem Singh Bist

32

ไม่ใช่การโค่นล้มที่เฉพาะเจาะจง แต่ถ้าคุณทำงานกับ Eclipse คุณสามารถลองเสี่ยงโชคในประวัติศาสตร์ท้องถิ่น

ตอนนี้มีบางอย่างที่เจาะจงมากขึ้นในการโค่นล้ม: หากคุณไม่ต้องการสร้างสาขาสำหรับการเปลี่ยนแปลงทุกครั้งที่คุณทำคุณสามารถตรวจสอบลำต้นสองสามอันในเครื่องได้ (trunk-modif-1, trunk-modif-2 .. .). "การปรับเปลี่ยน" แต่ละรายการจะทำบนโครงสร้างที่แยกจากกันและคุณจะต้องเก็บรายการที่ตรวจสอบว่าตรงกับการแก้ไขใด

หรือคุณสามารถใช้ Git ในเครื่อง แต่ฉันไม่เคยลอง


3
FYI - ไปที่ประวัติท้องถิ่นผ่านเมนูบริบทคลิกขวา "กู้คืนจากประวัติท้องถิ่น"
HDave

สำหรับส่วน Eclipse นี่คือคำตอบที่เป็นรูปธรรมมากขึ้น: stackoverflow.com/a/18220708/517705
Sk8erPeter

14

เมื่อเร็ว ๆ นี้ทำผิดพลาดในการไม่ทำการเปลี่ยนแปลงไฟล์ใหม่ (ประมาณ 10) ไปยัง SVN และพวกเขาทั้งหมดก็หายไปเพราะความผิดพลาดโง่ ๆ ของฉัน แต่สิ่งที่ช่วยฉันได้คือตัวเลือก "กู้คืนเวอร์ชันก่อนหน้า" ของหน้าต่างในเมนูบริบท ว้าวนั่นเป็นความโล่งใจและได้เรียนรู้บทเรียน


ขอขอบคุณ! สิ่งนี้ช่วยฉันจากการทำซ้ำชั่วโมงการทำงาน! ฉันไม่เคยเห็นคุณสมบัตินี้ของ windows มาก่อน แต่มันช่วยประหยัดเบคอนของฉัน!
NibblyPig

ฉันจะส่งเงิน 6000 ดอลลาร์ที่ฉันเป็นหนี้ให้คุณได้จากที่ใดเพื่อช่วยประหยัดวันทำงาน บทเรียนที่ได้เรียนรู้ ...
HDave

ขอบคุณที่บันทึกวันของฉัน
Opax Web

ฉันให้การตรวจสอบเพื่อรองรับการคืนค่าดังกล่าวปิดอยู่เพราะมันทำลายประสิทธิภาพ เมื่อเร็ว ๆ นี้ Eclipse ได้ลบโฟลเดอร์ของโปรเจ็กต์ของฉันรวมถึงไฟล์เก็บถาวร git เนื่องจากมีปัญหากับคุณสมบัติการเลิกทำและฉันอยากให้เปิดใช้งาน อย่างไรก็ตามโปรแกรม Windows ชื่อ Recuva ช่วยฉันด้วยการค้นหาพื้นที่ไฟล์ที่ถูกลบ ฉันระมัดระวังอย่างมากที่จะไม่เพิ่มเนื้อหาเพิ่มเติมในไดรฟ์ที่ได้รับผลกระทบจนกว่าฉันจะกู้คืนไฟล์ทั้งหมดของฉันและมันทำให้ไฟล์ต้นฉบับทุกไฟล์มีการเปลี่ยนแปลงตั้งแต่การสำรองข้อมูลล่าสุดของฉันเมื่อหนึ่งสัปดาห์ก่อนหน้านี้ ไฟล์ไบนารีส่วนใหญ่ไม่สามารถกู้คืนได้
Carl

8

คุณไม่สามารถกู้คืนไฟล์ถ้าคุณกำลังใช้ไคลเอ็นต์บรรทัดคำสั่ง SVN

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

นี่คือตัวเลือกที่กำหนดค่าได้ใน TortoiseSVN อยู่ภายใต้การตั้งค่า -> กล่องโต้ตอบ 1 -> ใช้ถังรีไซเคิลเมื่อย้อนกลับ

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


1
สุดยอด! ... ช่วยฉันไว้
Janani Kumar

6

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

ขอให้โชคดี Arkde


1
และถ้าเป็นไฟล์ใหม่ไฟล์นั้นจะถูกลบทิ้ง ในกรณีนั้นให้เลือกโฟลเดอร์ที่ไฟล์อยู่จากมุมมองโครงการจากนั้นเลือก 'Local History' IntelliJ บันทึกวันอีกครั้ง
Nufail

4

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


3

ฉันโชคดีมากที่พบบันทึกการเปลี่ยนแปลงภายในของไฟล์ (Local Revisions) ในเบราว์เซอร์ประวัติใน Eclipse ฉันตรวจสอบความแตกต่างทีละรายการและได้ทำการบันทึกสองสามไฟล์ก่อนที่จะเขียนทับ


2

ฉันเปลี่ยนคืนโซลูชัน (Visual Studio + AnkhSVN) และสูญเสียการเปลี่ยนแปลงของไฟล์บางไฟล์ ฉันไม่พบไฟล์ในถังรีไซเคิล

แต่:ฉันกู้คืนไฟล์ที่สูญหายด้วย Handy Recovery กล่าวคือ SVN เพียงแค่ลบไฟล์ของฉันเมื่อย้อนกลับ

ใช้ซอฟต์แวร์กู้คืนข้อมูลใด ๆเพื่อกู้คืนไฟล์ที่ถูกเปลี่ยนกลับ (เช่นทดลองใช้Handy Recovery )


1

ไม่ SVN ไม่เก็บบันทึกหรือสำรองข้อมูล (แม้ว่าจะมีวิธีแก้ปัญหาสำหรับ TortoiseSVN ที่ระบุไว้ในคำตอบอื่น ๆ ก็ตาม)

แต่ในกรณีที่มีคนเรียกดูคำตอบและไม่สังเกตเห็นความคิดเห็นนี้ในคำถามของ OP:

"โชคดีในกรณีนี้ฉันได้ทำการ" svn diff> temp.txt "ก่อนออกจากงานในวันศุกร์และไฟล์ temp.txt ยังอยู่ในฮาร์ดไดรฟ์ของฉันดังนั้นฉันจึงสามารถป้อนไฟล์นั้นลงใน" โปรแกรมแก้ไข "และกู้คืนได้ การเปลี่ยนแปลงที่หายไปของฉัน "

ฉันคิดว่ามันเป็นกระบวนทัศน์ทั่วไปที่จะทำ 'svn diff' ก่อนที่คุณจะทำ 'svn revert' หากคุณติดนิสัยในการทำเช่นนี้แม้ว่าความแตกต่างจะสะท้อนไปที่เทอร์มินัลอย่างน้อยคุณก็มีหนทางที่เป็นไปได้ทางหนึ่งในการกู้คืนการเปลี่ยนแปลงที่หายไป

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