กู้คืนจากการรีเซ็ต git - ฮาร์ด?


457

มีวิธีใดบ้างที่จะกู้คืนการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดในไดเร็กตอรี่ที่ใช้งานได้จากgit reset --hard HEAD?


49
ฉันขอแนะนำให้git resetไม่ทราบรายละเอียด คุณไม่ต้องการคำสั่งนั้นและมันอันตรายดังนั้นอย่าใช้มัน ในการกลับไปที่สาขาให้คอมมิชชันก่อนหน้านี้git rebase -iและปล่อยคอมมิทที่คุณไม่ต้องการหรือgit checkout(แยกส่วนหัว) ตามด้วยgit branch -Mเพื่อย้ายส่วนปลายสาขา คนแรกจะปฏิเสธที่จะเรียกใช้กับการเปลี่ยนแปลงในท้องถิ่นและในภายหลังจะทำงานเฉพาะในกรณีที่ไฟล์ที่แก้ไขในท้องถิ่นไม่แตกต่างกันระหว่างการแก้ไข
Jan Hudec

11
@Jan ฉันไม่เชื่ออย่างนั้น มีเหตุผลที่ถูกต้องสมบูรณ์ในการใช้การรีเซ็ต
spaaarky21

4
@ spaaarky21: ใช่แล้วมี แต่git reset --hard somewhereเป็นหนึ่งในไม่กี่คำสั่งคอมไพล์อันตรายจริงๆ
Jan Hudec

5
@Jan ฉันเห็นด้วย แต่มันอันตรายไม่ได้หมายความว่าคุณไม่ควรใช้มัน เพิ่งรู้ว่าคุณกำลังทำอะไรและระวังตัว :)
spaaarky21

3
ไม่เกี่ยวข้องกับการเลิกทำการรีเซ็ตคอมไพล์ - ฮาร์ดหัว ~ 1เพราะที่นี่โปสเตอร์ดั้งเดิมพยายามกู้คืนการเปลี่ยนแปลงที่ไม่ได้รับการยอมรับ

คำตอบ:


475

คุณไม่สามารถเรียกคืนการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดได้โดยทั่วไป

การเปลี่ยนแปลงระยะก่อนหน้านี้ ( git add) ควรกู้คืนได้จากวัตถุดัชนีดังนั้นหากคุณใช้git fsck --lost-foundให้ใช้เพื่อค้นหาวัตถุที่เกี่ยวข้อง (สิ่งนี้จะเขียนวัตถุไปยัง.git/lost-found/ไดเรกทอรีจากนั้นคุณสามารถใช้git show <filename>เพื่อดูเนื้อหาของแต่ละไฟล์)

ถ้าไม่คำตอบที่นี่จะเป็น: ดูที่การสำรองข้อมูลของคุณ บางทีบรรณาธิการ / IDE ของคุณเก็บสำเนาชั่วคราวไว้ใน / tmp หรือ C: \ TEMP และสิ่งอื่น ๆ เช่นนั้น [1]

git reset HEAD@{1}

สิ่งนี้จะคืนสู่ HEAD ก่อนหน้า

[1] เป็นกลุ่มเช่นเลือกเก็บเลิกถาวรคราสร้านค้า IDE ประวัติศาสตร์ท้องถิ่น ; คุณสมบัติดังกล่าวอาจช่วยคุณ **


18
ประวัติโลคัลของ Eclipse - และนอกจากนี้เนื่องจากการเปลี่ยนแปลงบางอย่างมีอายุมากกว่า 6 วันการสำรองข้อมูล Time Machine ของฉันของประวัติท้องถิ่นของ Eclipse! ด้วยเหตุผลบางอย่างการสำรองข้อมูล Time Machine ของโฟลเดอร์ที่จัดการโดย git ไม่ได้มีการเปลี่ยนแปลงก่อนหน้านี้
christianbrodbeck

2
คุณเป็นผู้ช่วยชีวิตอย่างจริงจังในคำใบ้! TextWrangler มีการสำรองไฟล์ ขอบคุณ
Vivek Sampara

6
IDE (IntelliJ) จัดเก็บการเปลี่ยนแปลงในเครื่องซึ่งบันทึกวันไว้ ขอบคุณสำหรับทิป!
progonkpa

1
ว้าวนี่ช่างน่าอัศจรรย์ มันทำงานได้แม้ว่าคุณจะไม่เคยกระทำ
Boudewijn Aasman

2
แน่นอนประวัติศาสตร์ท้องถิ่นใน Eclipse (Intellij ในกรณีของฉัน) บันทึกวันของฉันในการกู้คืนการเปลี่ยนแปลงที่ไม่ระบุตัวตนเอกสารที่นี่สำหรับ Intellij: blog.jetbrains.com/idea/2008/01//
ริชาร์ด

448

ตอบจากนี้ดังนั้น

$ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}    
203e84e HEAD@{1}: reset: moving to HEAD@{1}    
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug

# said the commit to be recovered back is on 9300f9d (with commit message fix-bug)
$ git reset HEAD@{7}

คุณได้รับคืนวันของคุณ! :)


24
เพียงเพิ่มคำตอบนี้จะช่วยให้ผู้ที่มีความมุ่งมั่นการเปลี่ยนแปลงที่ถูกโยนออกไปผ่านการตั้งค่าอย่างหนัก
murki

9
เยี่ยมมาก - แต่ในกรณีของฉันไฟล์นั้นหายไปอย่างสมบูรณ์ ใช้git checkout HEAD@{19}อนุญาตให้ฉันตรวจสอบไฟล์ที่หายไปในสถานะเดี่ยว จากนั้นนำมาใช้git checkout -b new-branch-nameเพื่อเพิ่มพวกเขากลับไปที่ repo ในสถานะ "แนบ"
NightOwl888

@ NightOwl888: newbie Git ที่นี่และฉันมีปัญหาเดียวกับที่ไฟล์ของฉันยังคงไป คุณสามารถอธิบายรายละเอียดเพิ่มเติมว่าคุณกู้คืนไฟล์ของคุณอย่างไรให้อยู่ในสถานะ "แนบ" (หรือคุณสามารถอธิบายความหมายที่แท้จริงได้) ขอบคุณมาก!
OhDaeSu

3
@ user3385759 - ใน Git เมื่อคุณใช้คำสั่งเช็คเอาต์กับทุกสิ่งที่ไม่ใช่สาขามันจะเข้าสู่โหมด "ถอดหัว" พิเศษ ซึ่งหมายความว่าคุณไม่ได้ชี้ไปที่สาขา แต่คุณสามารถดูสิ่งที่เช็คอินที่สถานะของเอนทิตี (ในกรณีนี้คือรายการ reflog) จากสถานะดังกล่าวคุณสามารถเปลี่ยนเป็นสาขา "ของจริง" ที่คุณสามารถกลับไปใช้อีกครั้งgit checkout -b new-branch-nameได้ หนังสือการควบคุมเวอร์ชันในทางปฏิบัติใช้ Gitได้ดีในการอธิบาย Git ในแง่ง่าย ๆ
NightOwl888

2
ใช่สิ่งที่ NomNomCameron และ Jesse Adelman พูด ฉันคิดผิดว่าการรีเซ็ตจะรีเซ็ตเป็นค่าคอมมิชชันล่าสุดของฉัน Nope มันเช็ดทุกอย่าง คำตอบนี้ช่วยให้ฉันประหยัดจากการสร้างงานของฉันหนึ่งหรือสองวัน
VeteranCoder

308

ฉันวิ่งไปgit reset --hardที่ repo ของฉันโดยไม่ได้ตั้งใจในวันนี้ด้วยในขณะที่มีการเปลี่ยนแปลงที่ไม่ได้รับอนุญาตในวันนี้ ที่จะได้รับมันกลับมาฉันวิ่งgit fsck --lost-foundซึ่งเขียน blobs unreferenced <path to repo>/.git/lost-found/ทั้งหมดเพื่อ ตั้งแต่ไฟล์ที่ถูกผูกมัดผมพบพวกเขาในไดเรกทอรีภายในother <path to repo>/.git/lost-found/จากตรงนั้นฉันสามารถเห็นไฟล์ที่ไม่มีข้อผูกมัดโดยใช้git show <filename>คัดลอก blobs และเปลี่ยนชื่อไฟล์

หมายเหตุ: ใช้งานได้เฉพาะเมื่อคุณเพิ่มไฟล์ที่คุณต้องการบันทึกลงในดัชนี (โดยใช้git add .) หากไฟล์ไม่ได้อยู่ในดัชนีไฟล์เหล่านั้นจะหายไป


4
lost-foundผมได้รับไฟล์เพียงกับการกระทำในการอ้างอิง แต่ฉันสามารถทำได้git showเพื่อรับเนื้อหา
Mitar

6
เพียงเพื่อประหยัดเวลาทุกคน#!/bin/bash cd PATH_TO_PROJECT/.git/lost-found/other FILES=* COUNTER = 0 for f in $FILES do echo "Processing $f file..." git show $f > "PATH_TO_RECOVERY_DIRECTORY/$COUNTER.m" let COUNTER=COUNTER+1 done
rwolst

209

ใช่คุณสามารถกู้คืนจากการฮาร์ดรีเซ็ตเป็นคอมไพล์ได้

ใช้:

git reflog

เพื่อรับตัวระบุการกระทำของคุณ จากนั้นใช้:

git reset --hard <commit-id-retrieved-using-reflog>

เคล็ดลับนี้ช่วยชีวิตฉันสองสามครั้ง

คุณสามารถค้นหาเอกสาร reflog ที่นี่


9
จนถึงตอนนี้ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุดและรัดกุมที่สุด มันอาจดูเหมือนว่าใช้ง่ายในการกู้คืนจากการgit reset --hardใช้อื่นgit reset --hardแต่ถ้าคุณไม่ได้ใช้--hardสวิตช์คุณจะถูกทิ้งไว้กับรายการในพื้นที่ทำงานของคุณที่จะเปลี่ยนงานที่คุณเพิ่งกู้คืนได้อย่างมีประสิทธิภาพ
Ryan H.

2
ทำงานเหมือนจับใจ! คำตอบก่อนหน้า ( stackoverflow.com/questions/5788037/recover-from-git-reset-hard/ ...... ) ไม่ทำงานสำหรับฉัน
codemax

3
คำตอบนี้ไม่ถูกต้อง วิธีนี้จะกู้คืนการเปลี่ยนแปลงที่ทำไว้ก่อนหน้านี้เท่านั้น จะไม่สามารถกู้คืนการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดได้ (ซึ่งเป็นสิ่งที่คำถามนี้เกี่ยวกับ)
Alderath

2
โซลูชันนี้ใช้ได้สำหรับฉัน ฉันทำการฮาร์ดรีเซ็ตและจากนั้นเมื่อฉันใช้git logฉันไม่เห็นรหัสการกระทำ ด้วยgit reflogฉันสามารถเห็นการกระทำ ID
dboscanv

2
มันใช้งานได้สำหรับฉัน ขอบคุณ !!!!!!
RedEyed

60

ขณะที่ฉันกำลังทำงานในโครงการท้องถิ่นฉันต้องการย้ายไปที่ GitHub จากนั้นสร้างที่เก็บใหม่ ในขณะที่ฉันพยายามเพิ่มไฟล์ทั้งหมดเหล่านี้ไปยังที่เก็บใหม่ด้วย. gignignore ฉันบังเอิญเพิ่มไฟล์ผิดและพยายามลบไฟล์นั้น

ฉันวิ่งgit reset --hard origin/master: พี

จากนั้นไฟล์ในเครื่องทั้งหมดของฉันจะถูกลบเพราะ repo ว่างเปล่า ฉันคิดว่าทุกอย่างหายไป

สิ่งนี้ช่วยชีวิตฉัน:

git reflog show
git reset HEAD@{1} 
git push 

หวังว่ามันจะช่วยชีวิตอีก


สำหรับฉันมันคือgit reset HEAD@\{27\} ขอบคุณ!
4oby

1
ฉันมี 7 ความมุ่งมั่นที่จะรีเซ็ตฉันใช้git reflog showในการตรวจสอบและจากครั้งแรกที่ฉันกระทำการใช้git reset HEAD@{number}
Vishwas Nahar

38

หากคุณใช้บางอย่างเช่น IntelliJ:

บนเมนูบริบทเลือกประวัติท้องถิ่นและคลิกแสดงประวัติบนเมนูย่อย:

มุมมองประวัติภายในสำหรับโครงการหรือโฟลเดอร์จะแสดงทุกอย่างที่คุณทำในช่วงสองสามวันที่ผ่านมา ในคอลัมน์การกระทำของส่วนล่างของกล่องโต้ตอบเลือกการกระทำที่คุณต้องการย้อนกลับ [... ] เช่นนั้นส่วนบนของกล่องโต้ตอบจะแสดงมุมมองแบบต้นไม้ของไฟล์ที่เปลี่ยนแปลง หากคุณต้องการกู้คืนไฟล์ที่ถูกลบเท่านั้นโดยไม่คำนึงถึงการเปลี่ยนแปลงอื่น ๆ ที่ทำไปตั้งแต่นั้นคุณสามารถเลือกไฟล์ Lost.txt ในมุมมองแบบต้นไม้และคลิกปุ่มเปลี่ยนกลับ

http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/

นี่เพิ่งทำให้ไฟของฉันออกไป!


นี่คือคำตอบที่ดีที่สุดสำหรับผู้ใช้ IntelliJ! ขอบคุณมากมันทำงานได้อย่างสมบูรณ์แบบ ฉันลองวิธีแก้ปัญหาอื่น ๆ แล้วและไม่มีวิธีใดทำงานได้ดี git reflogไม่ทำงานเพราะฉันไม่ยอมรับการเปลี่ยนแปลง git fsck --lost-foundใช้งานได้กับไฟล์ที่มีการจัดฉาก แต่ไม่ได้ถูกจัดฉากทั้งหมด ประวัติท้องถิ่นของ IntelliJ กู้คืนไฟล์ที่ไม่ได้บันทึกของฉันได้อย่างสมบูรณ์แบบฉันขอบคุณสำหรับคุณลักษณะนี้
Denes Papp

30

ฉันเพิ่งทำgit reset --hardและสูญเสียการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดทั้งหมด โชคดีที่ฉันใช้โปรแกรมแก้ไข (IntelliJ) และฉันสามารถกู้คืนการเปลี่ยนแปลงจากประวัติท้องถิ่นได้ Eclipse ควรอนุญาตให้คุณทำเช่นเดียวกัน


20

ตามคำจำกัดความแล้วgit reset --hardจะละทิ้งการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดโดยไม่มีวิธีใดที่ Git จะกู้คืนได้ (ระบบสำรองข้อมูลของคุณอาจช่วยได้ แต่ไม่ใช่ Git)

จริงๆแล้วมีบางกรณีที่git reset --hardเป็นความคิดที่ดี ในกรณีส่วนใหญ่มีคำสั่งที่ปลอดภัยกว่าที่จะทำสิ่งเดียวกัน:

  • git stashหากคุณต้องการที่จะทิ้งการเปลี่ยนแปลงปราศจากข้อผูกมัดของคุณแล้วใช้ git gcมันจะเก็บสำรองของการเปลี่ยนแปลงเหล่านี้ซึ่งจะหมดอายุหลังจากที่บางเวลาถ้าคุณทำงาน หากคุณแน่ใจว่า 99.9% คุณจะไม่ต้องการการเปลี่ยนแปลงเหล่านี้กลับไปgit stashคุณยังคงเป็นเพื่อนของคุณสำหรับกรณี 0.1% หากคุณแน่ใจ 100% แสดงว่าgit stashคุณยังเป็นเพื่อนอยู่เพราะ 100% มีข้อผิดพลาดในการวัด ;-)

  • หากคุณต้องการย้ายHEADและส่วนปลายของสาขาปัจจุบันของคุณในประวัติศาสตร์git reset --keepนั่นคือเพื่อนของคุณ มันจะทำสิ่งเดียวกันกับgit reset --hardแต่จะไม่ละทิ้งการเปลี่ยนแปลงในท้องถิ่นของคุณ

  • หากคุณต้องการทำทั้งสองอย่างgit stash && git reset --keepเพื่อนของคุณก็คือ

สอนให้นิ้วของคุณไม่ใช้git reset --hardมันจะคืนเงินให้หนึ่งวัน


ดังนั้นหากมีสิ่งใดgit stash && git reset --hardที่จะลบล้างเนื้อหาที่ถูกเก็บข้อมูลใด ๆ
jxramos

1
ไม่มีgit reset --hardไม่ได้ทิ้งซ่อน git stashเป็นการแทนที่git reset --hardในแง่ที่ว่าจะลบการเปลี่ยนแปลงที่ไม่ได้รับการยกเว้นจาก worktree ของคุณยกเว้นว่ามันจะทำให้พวกเขาปลอดภัยแทนที่จะทิ้งอย่างถาวร
Matthieu Moy

หรือเพียงแค่ยอมรับการเปลี่ยนแปลงของคุณก่อนที่คุณจะรีเซ็ตอย่างหนักและพวกเขาจะยังคงอยู่ใน repo ในพื้นที่ของคุณ
ThaJay

11

หากคุณตั้งใจรีเซ็ตการกระทำโดยไม่ตั้งใจให้ทำเช่นนี้

git reflog show
git reset HEAD@{2} // i.e where HEAD used to be two moves ago - may be different for your case

สมมติว่าHEAD@{2}เป็นรัฐที่คุณต้องการกลับไป


ทำงานได้สมบูรณ์แบบสำหรับฉันถ้าคุณทำเช่นนี้ใน PowerShell ตรวจสอบให้แน่ใจว่าเขียนเหมือนการรีเซ็ต git 'HEAD @ {2}' มิฉะนั้นจะไม่สามารถใช้งานได้ใน PowerShell
VectorX

10

นี่คือสิ่งที่ฉันมักจะทำถ้าฉันสูญเสียการเปลี่ยนแปลงบางอย่าง

git reflog
git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master
manually copy and paste changes from detached branch to master or working branch
git reset --hard HEAD // if needed
git add ... > git commit ... > git push ...

เพื่อย้ายตัวชี้กลับไปยังการกระทำก่อนหน้าของคุณ แต่ยังคงการเปลี่ยนแปลงที่คุณทำไว้ในการชำระเงินล่าสุดของคุณ git reset --soft dadada


8

ข้อมูลจะหายไป

เนื่องจากคุณไม่ได้กระทำ. git ของคุณจะไม่เก็บข้อมูลนี้ไว้ ดังนั้นโดยทั่วไปgitไม่สามารถกู้คืนให้คุณได้

แต่ถ้าคุณเพิ่งทำgit diffไปมีวิธีที่คุณสามารถกู้คืนโดยใช้เทอร์มินัลเอาท์พุตด้วย 3 ขั้นตอนง่ายๆดังต่อไปนี้

  1. เลื่อนของคุณขั้วและมองหา o / p git diffของ บันทึก o / p ในไฟล์ชื่อ diff.patch
  2. ค้นหาและแทนที่ช่องว่างทั้งหมด 7 ช่องและ 8 ช่องว่างด้วยอักขระแท็บ (\ t) และบันทึกการเปลี่ยนแปลง
  3. เข้าไปในที่เก็บ git ของคุณ ใช้ diff.patch ( patch -p1 < diff.patch)

คุณถูกบันทึกแล้ว! :)

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


7

ฉันพบปัญหาเดียวกันและฉันเกือบจะเสียสติ .... ในขั้นต้นฉันทำโครงการและผสาน .. ในภายหลังเมื่อฉันลองใช้git push --set-upstream origin master ฉันได้รับข้อผิดพลาดนี้

  fatal: refusing to merge unrelated histories

ดังนั้นฉันจึงวิ่งgit reset --hard HEADและลบโครงการ 3 สัปดาห์ แต่คำสั่งด้านล่างนี้บันทึกวัน:

git reset HEAD@{1}         //this command unstage changes after reset
git fsck --lost-found      //I got the dangling commit fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
git show <dangling commit something like-> fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b>
git rebase fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b

หวังว่านี่จะช่วยได้


6

reset --hard HEADคุณจะได้รับกลับมากระทำหลังจากทำ

ใช้ประโยชน์จาก " git reflog" เพื่อตรวจสอบประวัติของHEADในสาขา

คุณจะเห็นการกระทำและรหัสของคุณที่นี่

ทำ

git reset {commit Id of the commit you want to bring back}

5

หากคุณโชคดีที่เปิดไฟล์เดียวกันในโปรแกรมแก้ไขอื่น (เช่น. Sublime Text) ลองใช้ ctrl-z กับไฟล์เหล่านั้น มันเพิ่งช่วยฉัน ..


3

ฉันพบวิธีที่ยากที่ไฟล์ที่ไม่มีข้อผูกมัดใด ๆ ก่อนที่git reset --hard <commit>จะถูกลบออกจากประวัติคอมไพล์ อย่างไรก็ตามฉันโชคดีพอที่เปิดเซสชันการแก้ไขรหัสของฉันตลอดเวลาที่ฉันดึงผมออกมาฉันพบว่าcontrol + zไฟล์ที่ได้รับผลกระทบแต่ละไฟล์กลับมาเป็นเวอร์ชันก่อน Git รีเซ็ตทุกอย่างที่ฉันไม่ได้ขอเป็นพิเศษHooray!!


3

หากคุณพยายามใช้รหัสด้านล่าง:

git reflog show
# head to recover to
git reset HEAD@{1} 

และด้วยเหตุผลบางอย่างที่ได้รับ:

ข้อผิดพลาด: สวิตช์ที่ไม่รู้จัก `e '

จากนั้นลองใส่HEAD@{1}คำพูด

git reset 'HEAD@{1}'

3
 git reset HEAD@{4}

4 คือการเปลี่ยนแปลงก่อน 4 ขั้นตอนที่ผ่านมา หากคุณเลือกขั้นตอนที่ถูกต้องควรแสดงรายการไฟล์ที่คุณลบออกจากฮาร์ด จากนั้นทำ:

$ git reflog show

มันจะแสดงประวัติความเป็นมาในท้องถิ่นที่เราได้สร้างขึ้น ตอนนี้ทำ:

$ git reset --hard 8c4d112

8c4d112 เป็นรหัสที่คุณต้องการรีเซ็ตฮาร์ดการ์ดของคุณที่นั่น ลองดูที่ https://www.theserverside.com/video/How-to-use-the-git-reset-hard-command-to-change-a-commit-historyเพื่อรับข้อมูลเพิ่มเติม


ขอบคุณมาก @ โมฮัมหมัดมันช่วยฉันได้ ฉันไม่เห็นไฟล์ต้นฉบับของฉันก่อนหน้านี้ แต่ทำตามขั้นตอนด้านบนฉันสามารถกู้คืนไฟล์ต้นฉบับทั้งหมดได้
Gaurav Bansal

2

คำตอบที่ถูกต้อง. ตกลงตอนนี้ฉันชอบคอมไพล์ :-) นี่คือสูตรที่ง่ายขึ้น

git log HEAD@{2}
git reset --hard  HEAD@{2}

โดยที่ "2" คือจำนวนย้อนกลับไปยังจุดที่คุณยืนยันการเปลี่ยนแปลงของคุณ ในกรณีของฉันถูกขัดจังหวะโดยเพื่อนร่วมงานและหัวหน้าเพื่อช่วยแก้ปัญหาการสร้างบางอย่าง ดังนั้นรีเซ็ต - ฮาร์ดสองครั้ง; ดังนั้น HEAD และ HEAD @ {1} จึงเขียนทับมากเกินไป จะต้องสูญเสียงานหนักของเราไปแล้ว


2

ฉันทำgit reset --hardโปรเจ็คผิดโดยไม่ได้ตั้งใจ (รู้ ... ) ฉันเพิ่งทำงานกับไฟล์เดียวและมันยังคงเปิดอยู่ระหว่างและหลังจากที่ฉันรันคำสั่ง

COMMAND + Zถึงแม้ว่าผมจะไม่ได้มุ่งมั่นที่ผมก็สามารถที่จะดึงไฟล์เก่าที่มีความเรียบง่าย


0

คำตอบอ้างอิงจาก SO นี้

หลังจากรัน git reflog show บอกว่าคุณต้องการที่จะส่ง 9300f9d

หลังจากรัน git รีเซ็ต 9300f9d

คุณสามารถทำสถานะคอมไพล์จากนั้นคุณอาจต้องเช็กเอาต์ไฟล์เพื่อกู้คืนการเปลี่ยนแปลง

git checkout - ชื่อพา ธ / ชื่อไฟล์


0

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


0

( คำตอบที่เหมาะสมสำหรับกลุ่มย่อยของผู้ใช้ )

หากคุณใช้งาน MacOS (ล่าสุด) และแม้ว่าคุณจะออกจากดิสก์ Time Machine ของคุณระบบปฏิบัติการจะบันทึกข้อมูลสำรองรายชั่วโมงซึ่งเรียกว่าส แน็ปช็อตในเครื่อง

ป้อน Time Machine และไปยังไฟล์ที่คุณทำหาย ระบบปฏิบัติการจะถามคุณ:

The location to which you're restoring "file.ext" already contains an
item with the same name. Do you want to replace it with the one you're
restoring?

คุณควรจะกู้คืนไฟล์ที่คุณสูญเสียไป


0

หากคุณเปิด IDE ด้วยรหัสเดียวกันให้ลองทำ ctrl + z ในแต่ละไฟล์ที่คุณได้ทำการเปลี่ยนแปลง มันช่วยให้ฉันกู้คืนการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดหลังจากทำการรีเซ็ต git - ฮาร์ด


-3

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


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