เคยเจอปัญหานี้ไหม?
เรากำลังแก้ไขโค้ดอยู่ใน branch main อย่างตั้งใจ แต่จู่ๆ หัวหน้าบอกว่า "ช่วยสลับไป branch hotfix แก้บั๊กด่วนหน่อย!" 😱 ถ้า commit งานที่ยังไม่เสร็จก็รู้สึกไม่โอเค ไม่ควรเลยแหละ แต่ถ้าไม่ commit แล้วเปลี่ยน branch งานที่ทำไว้ก็หายหมดสิ!
git stash เกิดมาเพื่อช่วยแก้ปัญหานี้ครับ มันเป็นฟีเจอร์ใน Git ที่ช่วย เก็บการเปลี่ยนแปลงที่ยังไม่พร้อมจะ commit ไว้ชั่วคราว ให้คุณสามารถสลับไปทำงานอื่นได้แบบไร้กังวล แล้วค่อยกลับมาเอางานเดิมคืนเมื่อพร้อม!
Git Stash ทำงานยังไง?
git stash
จะเก็บการเปลี่ยนแปลงใน working directory (รวมถึง staging area) ไว้ในพื้นที่ที่เรียกว่า stash และคืน working directory ให้กลับมาเหมือนเดิม (เหมือนยังไม่ได้แก้ไขอะไรเลย)
วิธีใช้ Git Stash
นี่คือตัวอย่างคำสั่งพื้นฐานที่คุณควรรู้
- เก็บงานชั่วคราว (Stash Changes)
git stash
บันทึกการเปลี่ยนแปลงทั้งหมดใน working directory
- ดึงงานที่ stash ไว้กลับมาใช้ (Apply Stash)
git stash apply
ดึง stash ล่าสุดกลับมาใช้ (แต่ไม่ลบออกจาก stash)
- ดึง stash และลบออกจาก stash list (Pop Stash)
git stash pop
ดึง stash กลับมาใช้และลบออกจาก stash list
- ดู stash ที่เก็บไว้ (List Stash)
git stash list
แสดง stash ทั้งหมดที่เก็บไว้ เช่น
stash@{0}: WIP on main: abc123 Initial commit
stash@{1}: WIP on feature: def456 Add new feature
- ลบ stash ที่ไม่ต้องการ
git stash drop stash@{0}
- ลบ stash ทั้งหมดในครั้งเดียว
git stash clear
ตัวอย่างสถานการณ์ใช้งานจริง
- กำลังแก้โค้ดอยู่ แต่ต้องสลับ branch ด่วน
git stash # เก็บงานไว้ก่อน
git checkout hotfix
# แก้บั๊กใน hotfix branch
git checkout main
git stash pop # ดึงงานกลับมาทำต่อ
- ทำงานกับ staging area แล้ว แต่ยังไม่พร้อม commit
git stash push -m "แก้โค้ดหน้า UI"
git stash list # ดู stash ที่เก็บไว้
git stash apply stash@{0} # เอางานกลับมาต่อ
ข้อควรระวัง
- หากลืมดึง stash กลับมาใช้งาน อาจทำให้ stash ทับซ้อนกับงานอื่นได้
- Stash เหมาะกับงานที่ยังไม่พร้อมจะ commit แต่ถ้าเสร็จแล้วควร commit แทน
สรุป
git stash เป็นเหมือนเครื่องมือคู่ใจ Dev ที่ช่วยเก็บงานระหว่างทางได้อย่างปลอดภัยและสะดวก คุณไม่ต้องกลัวว่างานที่ทำจะหายหรือโดนทับ แถมยังทำให้ workflow ของคุณยืดหยุ่นมากขึ้นอีกด้วย!