Git Stash คือเครื่องมือที่ช่วยให้คุณบันทึกการเปลี่ยนแปลงชั่วคราวในระหว่างการทำงานกับ Git โดยไม่ต้อง commit ทันที บทความนี้จะอธิบายวิธีการใช้ Git Stash เพื่อบันทึก uncommitted changes ได้อย่างปลอดภัย และสามารถกลับมาใช้งานได้ทุกเมื่อ บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง ทีมพัฒนา สามารถใช้ Git Stash เพื่อจัดการ workflow ได้อย่างมีประสิทธิภาพ
ปัญหา: ทำงานค้างแล้วต้องเปลี่ยน Branch
ในการทำงานพัฒนาโค้ด คุณอาจพบสถานการณ์ที่ต้องเปลี่ยน branch เร็วๆ แต่ยังมีการเปลี่ยนแปลงที่ยังไม่ commit บน branch ปัจจุบัน หากคุณพยายาม checkout ไปยัง branch อื่น Git จะบ่นว่าคุณต้อง commit หรือ discard การเปลี่ยนแปลงก่อน นี่คือที่ที่ Git Stash มาช่วยบันทึกการเปลี่ยนแปลงชั่วคราวไว้
Git Stash คืออะไร
Git Stash เป็นเครื่องมือที่ทำหน้าที่เหมือนกับ stack หรือคลังเก็บชั่วคราวของ uncommitted changes ในไฟล์ต่างๆ คุณสามารถเก็บการเปลี่ยนแปลงไว้ในแห่งที่ปลอดภัย ทำให้ working directory กลับไปในสถานะสะอาด สามารถสลับไปยัง branch อื่นได้อย่างอิสระ จากนั้นคุณสามารถดึง stash กลับมาใช้งานได้ภายหลัง
ประโยชน์ของ Git Stash
- บันทึกการเปลี่ยนแปลงชั่วคราว โดยไม่ต้อง commit
- เปลี่ยน branch ได้โดยไม่ต้องสูญเสียงานที่ยังไม่เสร็จ
- สามารถเก็บหลายๆ stash พร้อมกัน
- สามารถดึงงานที่เก็บไว้กลับมาใช้งานได้อีกครั้ง
- ช่วยให้ working directory สะอาด ปลอดภัย
git stash vs git stash push
คำสั่ง git stash และ git stash push ทำหน้าที่เหมือนกัน เพียงแต่ว่า git stash เป็นชื่อสั้น (short form) ส่วน git stash push เป็นชื่อเต็ม (full form) ทั้งสองคำสั่งให้ผลลัพธ์เหมือนกัน
# คำสั่งแบบสั้น
git stash
# คำสั่งแบบเต็ม
git stash push
ดูรายการ Stash ที่บันทึกไว้
หากต้องการตรวจสอบว่าคุณได้บันทึก stash ไว้อันไหนบ้าง ใช้คำสั่ง:
git stash list
คำสั่งนี้จะแสดง stash ทั้งหมดที่คุณเก็บไว้ในรูปแบบ: stash@{0}, stash@{1}, stash@{2} เป็นต้น โดย stash@{0} เป็น stash ล่าสุดที่บันทึกไว้
git stash pop
นำ stash ที่บันทึกไว้กลับมาใช้งาน แล้ว ลบ stash ออกจากรายการ:
git stash pop
git stash apply
นำ stash กลับมา แต่ ไม่ลบ stash ออกจากรายการ ทำให้สามารถใช้ stash นี้ได้หลายครั้ง:
git stash apply
Stash ที่มีชื่อ: git stash push -m
เมื่อคุณมี stash หลายๆ อันและต้องการจำได้ว่า stash แต่ละอันใช้สำหรับอะไร สามารถให้ชื่อ stash ได้:
git stash push -m "WIP: add new login feature"
Stash ไฟล์เฉพาะ
หากต้องการบันทึกเพียงบางไฟล์เท่านั้น ไม่ใช่ทั้งหมด:
git stash push -- src/main.js src/config.js
Stash รวม Untracked Files
หากต้องการบันทึกไฟล์ใหม่ที่ยังไม่เคย git add มาก่อน ใช้ flag -u หรือ --include-untracked:
git stash push -u
ดูเนื้อหาใน Stash: git stash show -p
หากต้องการดูรายละเอียดของการเปลี่ยนแปลงใน stash ก่อนดึงกลับมา:
git stash show -p stash@{0}
ลบ Stash อันใดอันหนึ่ง
ลบ stash ที่ไม่ต้องการอีกต่อไป:
git stash drop stash@{0}
ลบ Stash ทั้งหมด
ลบ stash ทั้งหมดในครั้งเดียว:
git stash clear
ข้อควรระวัง: Conflicts เมื่อ Pop หรือ Apply
เมื่อคุณ pop หรือ apply stash บน branch ที่มีการเปลี่ยนแปลง อาจเกิด conflicts ได้ คุณต้องแก้ไข conflicts ด้วยตัวเอง:
- เปิด editor เพื่อดู conflict markers
- แก้ไข conflicts เลือกว่าต้องการเก็บโค้ดส่วนไหน
- Commit การเปลี่ยนแปลงหลังจากแก้ไข conflicts
- ลบ stash ด้วย
git stash drop stash@{0}หลังจากเสร็จสิ้น
ตัวอย่างการใช้งาน Git Stash จริง
สมมุติว่าคุณกำลังแก้ไขไฟล์ src/login.js บน feature branch แต่มี bug ฉุกเฉิน ที่ต้องแก้บน main branch ต่อไปนี้คือกระบวนการ:
# ตรวจสอบสถานะ
git status
# On branch feature/login
# Changes not staged for commit:
# modified: src/login.js
# บันทึกการเปลี่ยนแปลงไว้ชั่วคราว
git stash push -m "WIP: login feature in progress"
# ตอนนี้ branch สะอาดแล้ว สามารถเปลี่ยน branch ได้
git checkout main
git pull origin main
# แก้ไข bug และ commit
# ...
git add .
git commit -m "Fix critical bug"
# กลับไปยัง feature branch
git checkout feature/login
# ดึง stash ที่บันทึกไว้กลับมา
git stash pop
- ทำงานหลายๆ feature พร้อมกันโดยไม่ให้รบกวนกัน
- จัดการ environment ต่างๆ (development, staging, production) ได้ง่ายขึ้น
- แก้ไข hotfix อย่างรวดเร็วโดยไม่สูญเสียงานที่กำลังทำอยู่
- มี best practice ที่ชัดเจนในการจัดการ code
บน Cloud VPS คุณสามารถตั้ง deployment workflow ที่ใช้ Git Stash เป็นส่วนหนึ่งของ strategy ประจำวัน เพื่อให้การ deploy ปลอดภัยและมีประสิทธิภาพ
บทสรุป
Git Stash เป็นเครื่องมือที่ทรงคุณค่าในการพัฒนาโซฟต์แวร์ โดยให้คุณบันทึกการเปลี่ยนแปลงชั่วคราวได้อย่างปลอดภัย ไม่ต้องกังวลว่าจะสูญเสียงานที่ยังไม่เสร็จ ทำให้คุณสามารถสลับ branch และจัดการ workflow ได้อย่างมีประสิทธิภาพ บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง การใช้ Git Stash อย่างถูกต้องจะช่วยให้ทีมพัฒนามีการทำงานที่เรียบร้อยและปลอดภัยยิ่งขึ้น
