跳到主要内容
返回文章列表

ใช้ Git Reflog กู้ Commit ที่เหมือนหายไป

reflog เก็บประวัติการเปลี่ยนตำแหน่งของ reference ใน repository ท้องถิ่น อธิบายหลักการใช้งาน กรณีที่เหมาะ และข้อควรระวังจากเอกสารทางการ

ใช้ Git Reflog กู้ Commit ที่เหมือนหายไป

reflog เก็บประวัติการเปลี่ยนตำแหน่งของ reference ใน repository ท้องถิ่น เหมาะกับการกู้ commit ที่ยังอยู่ใน object database หลังคำสั่งแก้ประวัติ บทความนี้สรุปแนวคิดจากเอกสารทางการของ Git และจุดที่ควรตรวจเมื่อนำไปใช้จริง

ภาพรวม

Git บันทึกประวัติเป็น commit และแยกงานด้วย reference เช่น branch คำสั่งต่าง ๆ อาจเปลี่ยนไฟล์ทำงาน index หรือประวัติ จึงควรตรวจผลก่อนใช้กับงานร่วมกัน

หัวข้อนี้ตอบโจทย์เฉพาะเรื่อง: reflog เก็บประวัติการเปลี่ยนตำแหน่งของ reference ใน repository ท้องถิ่น จึงควรเริ่มจากปัญหาที่ต้องแก้และผลลัพธ์ที่คาดหวัง ไม่ใช่เพียงเปิดฟีเจอร์เพราะมีอยู่ในเครื่องมือ

หลักการทำงาน

เมื่อ reset หรือ rebase แล้วหา commit ไม่เจอ สามารถดู hash เก่าและสร้าง branch อ้างอิงกลับมา

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

เหมาะกับงานแบบไหน

เหมาะกับการกู้ commit ที่ยังอยู่ใน object database หลังคำสั่งแก้ประวัติ

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

ขั้นตอนนำไปใช้

  1. สร้าง branch หรือ worktree ทดสอบและบันทึก commit hash
  2. ดู git status และ git log ก่อนและหลังใช้คำสั่ง
  3. ตรวจ diff และรันทดสอบที่เกี่ยวข้องก่อนส่งงาน

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

ข้อควรระวัง

reflog เป็นข้อมูลท้องถิ่นและมีวันหมดอายุ จึงไม่ใช่ระบบ backup ถาวร

แปลงข้อควรระวังนี้เป็นรายการตรวจในการทบทวนงาน เพราะปัญหาจากค่าตั้งต้นอาจไม่แสดงทันทีในสภาพแวดล้อมทดสอบ

สรุป

reflog เก็บประวัติการเปลี่ยนตำแหน่งของ reference ใน repository ท้องถิ่น เหมาะกับการกู้ commit ที่ยังอยู่ใน object database หลังคำสั่งแก้ประวัติ ก่อนนำไปใช้กับงานหลัก ควรตรวจผลตามขั้นตอนข้างต้นและทบทวนข้อจำกัดของระบบที่มีอยู่

อ่านเพิ่มเติม: เอกสารทางการของ Git