ข้ามไปยังเนื้อหา
Tayakorn
Git Handbook

Git Handbook

LEVEL 2 · ระดับกลาง

ทิ้ง/ย้อนงานที่ยังไม่แชร์

ความกลัวที่สุดของมือใหม่คือ "ทำพัง แล้วงานหาย" ความจริงคือ Git ออกแบบมาให้กู้คืนได้แทบทุกอย่าง ขอแค่เคย commit ไว้ บทนี้ว่าด้วยการทิ้ง/ย้อนงานที่ ยังไม่แชร์กับใคร — ยังอยู่ในเครื่องคุณคนเดียว จึงย้อนได้อย่างอิสระเต็มที่โดยไม่กระทบใคร กุญแจคือเข้าใจว่าแต่ละคำสั่ง "ย้อน" คนละชั้นกัน (งานที่ push แชร์ไปแล้วมีกติกาต่างออกไป — บทที่ 7)

6.1 restore — ทิ้งการแก้ที่ยังไม่ commit

แก้ไฟล์มั่วจนอยากเริ่มใหม่? git restore <file> ดึงไฟล์กลับไปเป็นเหมือน commit ล่าสุด ส่วน git restore --staged <file> เอาไฟล์ออกจากพื้นที่จัดเตรียม (ถอน add) โดยไม่ทิ้งการแก้

6.2 reset — เลื่อนป้าย branch ถอยหลัง

เข้าใจ reset ได้ทันทีถ้าจำว่ามันแค่ เลื่อนป้าย branch ไปชี้ commit อื่น ความต่างอยู่ที่ว่ามันจะแตะพื้นที่จัดเตรียมและไฟล์จริงด้วยไหม:

HEADป้าย branchStaging(index)Working(ไฟล์จริง)--soft→ งานค้างใน staging รอ commit--mixed→ งานหลุดมาเป็นไฟล์แก้ · ค่าเริ่มต้น--hard→ งานที่ยังไม่ commit หายถาวรรีเซ็ตไปที่ commit เป้าหมาย — กู้ได้จาก reflogลบงานที่ยังไม่ commit — หายจริงไม่แตะ
FIG 6.1 ทั้งสามโหมดเลื่อนป้าย branch เหมือนกัน ต่างกันที่ “ตามไปรีเซ็ต” ลึกแค่ไหน · --soft แตะแค่ป้าย, --mixed แตะป้าย+staging, --hard แตะถึงไฟล์จริง — จุดเดียวที่ทำให้งานหายถาวร
โหมดเลื่อนป้ายพื้นที่จัดเตรียมไฟล์จริงใช้เมื่อ
--softคงไว้คงไว้รวมหลาย commit เป็นอันเดียว, แก้ข้อความ
--mixed (ค่าเริ่มต้น)ล้างคงไว้ถอน commit แต่เก็บงานไว้ add ใหม่
--hardล้างลบทิ้งทิ้งทุกอย่าง กลับไปจุดเดิมจริง ๆ

สรุปบทที่ 6restore ทิ้งการแก้ที่ยังไม่ commit · reset เลื่อนป้าย branch (soft เก็บงาน, hard ลบงาน) · commit --amend แก้ commit ล่าสุด · ทั้งหมดนี้ทำได้อย่างอิสระเพราะยังไม่แชร์กับใคร — พอ push แล้วกติกาเปลี่ยนทันที (บทที่ 7)

อ่านแบบเต็มเล่ม