วิธีการย้อนกลับ git reset --hard HEAD~1
การเรียกใช้คำสั่ง git reset --hard HEAD~1
โดยไม่ตั้งใจอาจทำให้ผู้พัฒนารู้สึกหงุดหงิด นี่คือคำสั่งที่จะลบคอมมิตล่าสุดและการเปลี่ยนแปลงทั้งหมดที่มาพร้อมกับมันอย่างถาวร ทำให้คุณอยู่ในสถานการณ์ที่ยากลำบาก อย่างไรก็ตาม ไม่ต้องกังวล—ยังมีวิธีในการกู้คืนคอมมิตที่หายไปของคุณตราบใดที่มันยังไม่ได้ถูกเก็บทำความสะอาด ในโพสต์นี้ เราจะเจาะลึกลงไปถึงวิธีการย้อนกลับผลกระทบจากคำสั่งนี้และกู้คืนไฟล์ของคุณ
ทำความเข้าใจกับปัญหา
เมื่อคุณเรียกใช้ git reset --hard HEAD~1
Git จะย้ายพอยน์เตอร์ HEAD
กลับไปหนึ่งคอมมิต การกระทำนี้จะละทิ้งการเปลี่ยนแปลงใดๆ ที่เกิดขึ้นในคอมมิตล่าสุดและในไดเรกทอรีทำงานของคุณ ในโค้ด คำสั่งนี้มีลักษณะดังนี้:
git reset --hard HEAD~1
ปัญหาคือเมื่อล้างรีเซ็ตแล้ว ดูเหมือนว่าคอมมิตและการเปลี่ยนแปลงของคุณจะหายไป แต่โชคดีที่ Git รักษาล็อกการอ้างอิง (reflog) ซึ่งทำให้คุณสามารถดูการเปลี่ยนแปลงทั้งหมดที่ทำกับ HEAD
และให้เส้นทางในการกู้คืน
การแก้ปัญหา: การใช้ Git Reflog
1. ตรวจสอบ Reflog
ขั้นตอนแรกในการกู้คืนคอมมิตที่หายไปคือการตรวจสอบ reflog ของคุณ Reflog จะติดตามการอัปเดตไปยังพอยน์เตอร์ HEAD
ซึ่งหมายความว่าคุณจะสามารถเห็นว่า HEAD
ของคุณอยู่ที่ไหนก่อนที่คุณจะเรียกใช้คำสั่งรีเซ็ต
เรียกใช้คำสั่งต่อไปนี้เพื่อตรวจสอบ reflog ของคุณ:
git reflog
คุณจะเห็นผลลัพธ์ที่คล้ายคลึงกับนี้:
1a75c1d... HEAD@{0}: reset --hard HEAD^: updating HEAD
f6e5064... HEAD@{1}: commit: added file2
ในกรณีนี้ f6e5064
คือแฮชของคอมมิตที่หายไป (ซึ่งคุณได้เพิ่ม file2
)
2. รีเซ็ตกลับไปยังคอมมิตที่หายไป
ตอนนี้ที่คุณมีการอ้างอิงคอมมิต (f6e5064
) คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อคืนค่าภาวะก่อนหน้า:
git reset --hard f6e5064
หลังจากที่คุณเรียกใช้คำสั่งนี้ สถานะของรีโพซิทอรีของคุณจะถูกส่งกลับไปยังสถานะเดิมโดยมีการเปลี่ยนแปลงที่เพิ่มเข้ามาจาก file2
คุณสามารถตรวจสอบว่าไฟล์ถูกกู้คืนสำเร็จโดยการตรวจสอบเนื้อหาของมัน:
cat file2
หากคุณเห็นผลลัพธ์ที่คาดหวัง (ในกรณีนี้คือเนื้อหาของ file2
) นั่นยืนยันว่าการกู้คืนของคุณประสบความสำเร็จ
สรุป
การสูญเสียงานของคุณเนื่องจากการรีเซ็ตอย่างรุนแรงไม่จำเป็นต้องหมายความว่าโครงการของคุณจะต้องประสบกับหายนะ โดยการใช้ reflog คุณสามารถกู้คืนคอมมิตที่หายไปได้อย่างง่ายดายในไม่กี่คำสั่ง
ข้อที่ควรจำ:
- Reflog คือเพื่อนของคุณ: ใช้
git reflog
เพื่อตามหาคอมมิตที่หายไป - การรีเซ็ต: ใช้
git reset --hard <commit-hash>
เพื่กลับไปยังคอมมิตก่อนหน้านี้เมื่อจำเป็น - ความดื้อรั้น: อย่าตกใจ; Git มีกลไกในการกู้คืนจากการกระทำเช่นนี้
ด้วยเคล็ดลับเหล่านี้ คุณจะพร้อมมากขึ้นในการจัดการความผิดพลาดที่เกี่ยวข้องกับคำสั่ง Git ในอนาคต!