วิธีการย้อนกลับ 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 ในอนาคต!