Skip to content
Tayakorn
Git Handbook

Git Handbook

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) — เจอของหายให้รีบกู้ อย่าปล่อยผ่านนานเป็นเดือน

สรุปบทที่ 7revert สร้าง commit ตรงข้ามกับของเดิม ใช้กับงานที่ push แชร์แล้วโดยไม่กระทบคนอื่น · reflog จำทุกที่ที่ HEAD เคยอยู่ — กู้ commit ที่นึกว่าหายได้เกือบเสมอ แต่มีอายุจำกัด ไม่ใช่ถาวร (บทที่ 14.1)

Read the full book