LEVEL 2 · ระดับกลาง
ย้อนงานที่แชร์แล้ว & reflog
งานที่ push ขึ้นไปแล้วมีคนอื่นถือสำเนาอยู่ด้วย จะ reset หรือ amend ทิ้งตรง ๆ แบบบทที่ 6 ไม่ได้อีกต่อไป เพราะนั่นคือการเขียนประวัติทับสิ่งที่คนอื่นมีอยู่แล้ว บทนี้คือวิธีย้อนงานที่แชร์แล้วอย่างปลอดภัย และตาข่ายนิรภัยตัวจริงที่รองรับความผิดพลาดได้เกือบทุกกรณีตลอดทั้งเล่ม
7.1 revert — ย้อนแบบปลอดภัยสำหรับงานที่แชร์แล้ว
reset เขียนประวัติใหม่ จึงห้ามใช้กับ commit ที่ push ขึ้นไปแล้ว (คนอื่นมีของชุดนั้นอยู่) ทางที่ถูกคือ git revert <commit> ซึ่ง สร้าง commit ใหม่ที่ทำตรงข้ามกับ commit เดิม — ผลลัพธ์เหมือนยกเลิก แต่ประวัติเดินหน้าต่อ ไม่มีใครเดือดร้อน
7.2 reflog — ตาข่ายนิรภัยที่ช่วยชีวิต
นี่คือคำสั่งที่จะทำให้คุณเลิกกลัว Git ตลอดไป ทุกครั้งที่ HEAD ขยับ — commit, switch, reset, rebase — Git จดไว้ใน reflog สมุดบันทึกส่วนตัวในเครื่อง ถึงจะ reset --hard ทิ้ง commit ไปแล้ว commit นั้นก็ยังอยู่ และ reflog ยังจำรหัสมันได้:
$ git reflog
a1e9f02 HEAD@{0}: reset: moving to a1e9f02 ← จุดที่เพิ่งพลาด (ย้อนไป init)
9f2c1a8 HEAD@{1}: commit: เพิ่มหน้า login ← commit ที่นึกว่าหาย
$ git reset --hard 9f2c1a8 # ดึงกลับมา — งานกลับมาครบข้อควรรู้: reflog ไม่ได้จำไว้ตลอดกาล มันมีอายุจำกัด (รายละเอียดและตัวเลขจริงอยู่บทที่ 14.1) — เจอของหายให้รีบกู้ อย่าปล่อยผ่านนานเป็นเดือน
✅ สรุปบทที่ 7 —
revertสร้าง commit ตรงข้ามกับของเดิม ใช้กับงานที่ push แชร์แล้วโดยไม่กระทบคนอื่น ·reflogจำทุกที่ที่ HEAD เคยอยู่ — กู้ commit ที่นึกว่าหายได้เกือบเสมอ แต่มีอายุจำกัด ไม่ใช่ถาวร (บทที่ 14.1)