Screen Shot 2559-01-18 at 1.16.10 PM

ช่วงนี้มีโอกาสได้ใช้ git stash ในการเก็บงานที่พัฒนาไม่เสร็จ
หรือต้องการ rollback code ที่เปลี่ยนแปลงจำนวนเยอะ ๆ
ซึ่งใช้คำสั่งง่าย ๆ ดังนี้

$git stash save --keep-index
$git stash drop

เพียงเท่านี้ก็ rollback code กลับไปได้แล้ว
รวมทั้งนำมาใช้ร่วมกับการพัฒนาตามแนวคิด TDD (Test-Driven Development) ได้อย่างดีด้วย
จึงนำมาสรุปไว้นิดหน่อย

เมื่อลองไปค้นหาใน internet ก็เจอบทความเรื่องเดียวกัน
คือ Git Stash-Driven Development
เลยใช้เป็นตัวหลักในการอธิบายเลยดีกว่า

ขั้นตอนในการพัฒนาตามแนวคิด TDD ร่วมกับ Git เป็นดังนี้

  1. เขียน test code ที่มัน fail (RED)
  2. เขียน production code เพื่อทำให้ test ผ่าน (GREEN)
  3. ทำการ commit code
  4. ทำการ refactor code
  5. ทำการ commit code
  6. ทำการ push code
  7. กลับไปยังข้อ 1

ถ้าเวลาในการทำงานแต่ละรอบ หรือ lead time น้อย ๆ แล้ว
ยิ่งทำให้เราได้รับ feedback ที่เร็ว
นั่นส่งผลดีอย่างมาก

และสะท้อนให้เราเห็นว่า
สิ่งที่เรากำลังทำมันเล็กหรือใหญ่กันแน่
นั่นคือ สอนให้รู้เรื่องการแตกงานนั่นเอง

บ่อยครั้งเมื่อเราเขียน test ใหม่แล้ว พบว่าการเขียน production code มันยากมาก !!

ดังนั้นสิ่งที่เราทำได้คือ

  • ทำการลบ test
  • ทำการ ignore test

จากนั้นทำการ commit การเปลี่ยนแปลง
แล้วกลับมาทำการ refactor code ต่อ
เพื่อทำให้ code มันง่าย และ พร้อมสำหรับ test ชุดใหม่
จากนั้นทำการ commit และ push code

เมื่อทุกอย่างพร้อมก็ทำการเขียน test หรือ เอา ignore test ออกไป
และเริ่มเขียน production code ต่อไป
ซึ่งทำแบบนี้ไปเรื่อย ๆ

แสดงดังรูป
listening-to-the-tests

แต่ก็มีบางกรณีที่ไม่สามารถ ignore หรือ ลบ test ได้

ไม่ต้องการ commit ignore test ขึ้นไป
ไม่ต้องการ commit code ที่ไม่เสร็จ
ไม่ต้องการ commit code ที่ refactor ไม่เสร็จ
บางครั้งต้องสลับไปพัฒนาระบบอื่น ทั้ง ๆ ที่ code ยังไม่เสร็จ
สิ่งต่าง ๆ เหล่านี้ ล้วนก่อให้เกิดอันตรายอย่างมากในอนาคตอันใกล้ !!

คำถาม
มีวิธีการใดบ้างที่ช่วยบรรเทาความเจ็บปวดเหล่านี้ได้บ้าง ?
คำตอบที่ผมได้รับกลับมาจากการลอง คือ
ใช้งาน git stash ซะ
เนื่องจากเราสามารถซ่อนการเปลี่ยนแปลง
ที่เราไม่ต้องการ commit ได้

แต่ในการใช้งาน git stash นั้น
ผมมีกฎง่าย ๆ 1 ข้อคือ ห้ามทำการ stash เกินกว่า 1 ครั้ง
ไม่เช่นนั้นคุณจะซ่อนการเปลี่ยนแปลงไว้เยอะมาก ๆ

ผลที่ได้คือ การเขียน code ตามแนวคิด TDD

มันลื่นไหล หรือ flow มากยิ่งขึ้น
รวมทั้งทำให้ code ที่ commit ขึ้นไป
มันมีความสวยงาม และ มี code ที่จำเป็นเท่านั้น

นี่คือหนึ่งวิธีการเพื่อปรับปรุงการทำงานให้ดี และ สะดวกขึ้น
และเป็นการประยุกต์เครื่องมือต่าง ๆ
มาช่วยแก้ไขปัญหาที่เราพบเจออยู่เป็นประจำ

ซึ่งแนวคิดนี้มันคือ Git Stash-Driven Development นั่นเอง
ลองนำไปใช้ดูครับ
เผื่อจะมีประโยชน์บ้าง

Tags:,