Level 5 · Vibe Codingscheduleอ่าน 8 นาที

ก่อนแตะอะไร ต้องมีจุดถอย วินัยการย้อนกลับได้

starsTL;DR

เช้านี้มันยังทำงานได้ดี พอคุณแก้ไปสองสามอย่าง มันพัง แล้วคุณก็กลับไปหาเวอร์ชันของเช้านี้ไม่เจอ บทนี้ไม่ได้สอนว่า git คืออะไร บทก่อนสอนไปแล้ว บทนี้สอนวินัยที่สำคัญที่สุดของการ vibe coding คือก่อนแตะอะไรก็ตาม ต้องมีจุดถอยก่อนเสมอ

ก่อนแตะอะไร ต้องมีจุดถอย วินัยการย้อนกลับได้

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

ท้องคุณหล่นวูบ เพราะคุณรู้ว่าเมื่อเช้ามันยังดีอยู่ แต่ตอนนี้คุณไม่รู้เลยว่าจะกลับไปหา "เวอร์ชันเมื่อเช้า" ได้ยังไง คุณแก้มาตั้งหลายรอบ จำไม่ได้ด้วยซ้ำว่าแก้อะไรไปบ้าง จะกด undo ก็ไม่รู้ต้องกดกี่ครั้ง กดมากไปก็เลยจุดที่ดี กดน้อยไปก็ยังพัง

ความกลัวนี้แหละที่ทำให้คนหยุดอยู่แค่ตรงนี้ ไม่กล้าแตะอะไรอีก เพราะกลัวว่าแตะแล้วพังแล้วกลับไม่ได้ และความกลัวนี้ไม่ได้เกิดจากความไม่รู้จักเครื่องมือ บทก่อน (บท git กับ GitHub) สอนเครื่องมือไปครบแล้ว คุณรู้แล้วว่า commit คือการถ่ายภาพไฟล์ทุกไฟล์เก็บไว้ branch คือสายทดลองที่แยกออกไป และ revert คือการย้อนกลับไปจุดเก่า บทนี้ไม่สอนซ้ำว่าของพวกนั้นคืออะไร บทนี้สอนสิ่งเดียวที่เหลือ และเป็นสิ่งที่ลบความกลัวนั้นได้จริง คือ วินัย ว่าจะใช้มันเมื่อไร

เพราะความจริงคือ มีเครื่องย้อนเวลาในมือยังไม่พอ ถ้าคุณลืมกดเซฟก่อนเริ่ม คุณก็ยังไม่มีจุดให้กลับอยู่ดี ความกลัวจึงไม่ได้หายเพราะคุณรู้จัก git มันหายเพราะคุณทำเป็นนิสัยว่า ก่อนแตะอะไร ต้องมีจุดถอยก่อนเสมอ นั่นคือทั้งหมดของบทนี้

ทำไม commit ถึงเป็นความปลอดภัย ไม่ใช่ความเสี่ยง

หลายคนได้ยินคำว่า commit แล้วรู้สึกว่ามันฟังดูจริงจัง เหมือนการ "ยืนยันถาวร" ที่กดแล้วถอนไม่ได้ เลยกลัวที่จะ commit คิดว่ายิ่ง commit ยิ่งล็อกตัวเอง จริง ๆ มันกลับด้านกันเลย commit ไม่ใช่ความเสี่ยง commit คือความปลอดภัย

เหตุผลคือ commit แต่ละครั้งไม่ได้ "ลบ" หรือ "ทับ" อะไร มันแค่เพิ่มเซฟพอยต์ใหม่หนึ่งจุดเข้าไปในไทม์ไลน์ เซฟเก่าทุกอันยังอยู่ครบ คุณ commit บ่อยแค่ไหน ก็ยิ่งมีจุดให้กลับไปมากขึ้น ไม่ใช่น้อยลง การไม่ commit ต่างหากที่อันตราย เพราะถ้าคุณแก้ไปเรื่อย ๆ โดยไม่เคยเซฟ พอมันพัง คุณไม่มีจุดไหนให้กลับไปเลย

พูดอีกแบบ ทุก commit คือร่างแหนิรภัยอีกชั้นที่กางรอไว้ใต้ตัวคุณ ยิ่งมีมาก ยิ่งตกแล้วเจ็บน้อย คนที่ทำงานกับโค้ดอย่างปลอดภัยเลย commit ถี่ ๆ ทำเสร็จชิ้นเล็ก ๆ ชิ้นหนึ่งก็เซฟที ไม่ใช่เพราะขยัน แต่เพราะมันคือการกางแหรอไว้ก่อนกระโดด

การตัดสินใจ commit หรือ branch

มีจุดถอยได้สองแบบ และคนส่วนใหญ่ใช้ผิดจังหวะ commit คือการกดเซฟทับเส้นเดิม ถอยกลับได้ทีหนึ่งก็ถอยกลับไปจุดก่อนหน้า branch คือการแยกสายสำรองทั้งเส้นออกมาขนานกับของเดิม ของเดิมไม่ถูกแตะเลย คำถามคือเมื่อไรใช้อันไหน และมีกฎสั้น ๆ ตัดสินได้

ถ้างานนี้พังแล้วถอย commit เดียวจบ ใช้ commit ก็พอ ถ้างานนี้แตะของเก่าทั้งกองพร้อมกัน และถอยทีละ commit ไม่ไหว ให้แตก branch

เหตุผลคือ commit เหมาะกับการถอยแบบ "ย้อนหนึ่งก้าว" คุณ commit ของดีไว้ แก้ต่อ ถ้าพังก็ถอยกลับมา commit ที่เพิ่งทำ จบ แต่บางงานไม่ได้แก้แค่จุดเดียว มันลากทั้งโปรเจกต์ไปพร้อมกัน ถอยทีละก้าวไม่ทัน งานแบบนี้คุณอยากมีสำเนาทั้งเส้นในสภาพดีเก็บไว้แยกต่างหาก เผื่อทุกอย่างเละพร้อมกันจะได้ดึงกลับมาทั้งก้อน นั่นคือหน้าที่ของ branch

💡 ใจความสำคัญ: จุดถอยมีสองแบบ ถ้าพังแล้วถอย commit เดียวจบ ใช้ commit ก็พอ ถ้างานนี้แตะของเก่าทั้งกองพร้อมกันจนถอยทีละ commit ไม่ไหว ให้แตก branch สำรองทั้งเส้นไว้ก่อน

ของจริง ทำไมเลือก branch ไม่ใช่ commit

เว็บ AI ภาษาคน ที่คุณกำลังอ่านอยู่นี้ สร้างโดยคนที่ไม่ใช่โปรแกรมเมอร์ มีอยู่ครั้งหนึ่งที่การตัดสินใจนี้เห็นภาพชัดมาก

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

สิ่งที่เขาทำก่อนลงมือ จึงไม่ใช่แค่ commit แต่เป็นการแตก branch สำรองขึ้นมาหนึ่งเส้น ตั้งชื่อว่า backup/pre-email-rewrite ชื่อนี้แปลตรงตัวว่า "สำรอง ก่อนเขียนอีเมลใหม่" branch นี้คือสำเนาทั้งเส้นของโปรเจกต์ในสภาพดี เก็บแช่แข็งไว้ขนานกับเส้นที่กำลังจะถูกรื้อ พอมีสำเนาทั้งเส้นนี้ไว้ ต่อให้งานรื้อประวัติเละหมด เขาก็แค่กลับไป branch backup/pre-email-rewrite ก็ได้โปรเจกต์ทั้งก้อนในสภาพดีคืนมาทันที

นี่คือกฎข้างบนใช้จริงในงานจริง งานนี้แตะของเก่าทั้งกองพร้อมกัน ถอยทีละ commit ไม่ไหว คำตอบจึงเป็น branch ไม่ใช่ commit

กฎข้อแรกของการ vibe coding ไม่มีเซฟพอยต์ ไม่แตะ

ทั้งหมดที่พูดมา สรุปลงเป็นกฎข้อเดียวที่สำคัญที่สุดในการทำงานกับ AI กฎนี้เรียกว่า กฎข้อ 1 เรื่องการย้อนกลับได้ และมันสั้นมาก

ก่อนแตะอะไรก็ตาม ทำเซฟพอยต์ก่อน ถ้ายังไม่มีเซฟพอยต์ ห้ามแตะ

เหตุผลคือ ความกลัวเรื่อง "แก้แล้วพังแล้วกลับไม่ได้" ที่ทำให้ท้องคุณหล่นวูบตอนต้นบท เกิดขึ้นได้ทางเดียวเท่านั้น คือตอนที่คุณแตะของโดยไม่มีเซฟไว้ก่อน ถ้าคุณมีเซฟพอยต์อยู่ก่อนทุกครั้ง สถานการณ์ "กลับไม่ได้" จะไม่มีวันเกิด เพราะมันมีจุดให้กลับเสมอ ความกลัวหายไปไม่ใช่เพราะคุณเก่งขึ้น แต่เพราะคุณกางแหไว้ก่อนแล้ว

ในทางปฏิบัติ กฎนี้ง่ายมาก ก่อนจะให้ AI แก้อะไรที่คุณไม่มั่นใจ บอกมันว่า "commit ของที่ดีอยู่ตอนนี้ไว้ก่อน แล้วค่อยแก้" หรือถ้าเป็นงานเสี่ยงหนักตามกฎข้างบน บอกว่า "สร้าง branch ใหม่ไว้ทดลอง" เท่านี้คุณก็มีจุดถอยรอแล้ว

และคุณอ่านออกได้ว่า AI ทำให้จริงหรือยัง เวลามันทำเสร็จมันจะรายงานกลับมาประมาณว่า "commit แล้ว: หน้าหลักทำงานปกติ" หรือ "สร้าง branch ใหม่ชื่อ add-login แล้ว ตอนนี้ทำงานอยู่บนกิ่งนี้" สองประโยคนี้คือสัญญาณว่าจุดถอยกางไว้แล้ว ถ้าคุณสั่งให้เซฟแล้วมันไม่รายงานอะไรกลับมาเลย แปลว่ายังไม่มีจุดถอย อย่าเพิ่งให้มันแตะของ และสิ่งที่อยู่ในเครื่องจริง ในเว็บที่คนอื่นเห็น จะไม่มีวันได้เห็นการทดลองที่ยังไม่เสร็จของคุณ เพราะการทดลองอยู่ใน commit หรือ branch ที่แยกไว้ ไม่ใช่ในของจริง

ภาพช่วยจำ เซฟเกมก่อนสู้บอส

วินัยทั้งหมดนี้สรุปลงในภาพเดียวที่คุณคงเคยเจอ ลองนึกถึงเวลาเล่นเกมแล้วกำลังจะถึงด่านบอสที่ยากมาก สิ่งแรกที่คนเล่นเก่งทำคือเซฟเกมก่อน พอเซฟแล้วเข้าไปสู้ ถ้าตายก็แค่โหลดเซฟกลับมา เริ่มใหม่ที่จุดเดิม การตายเลยไม่น่ากลัวอีกต่อไป เพราะมันไม่ได้ทำให้คุณเสียอะไรเลย คุณกล้าลองสู้แบบเสี่ยง ๆ ได้ เพราะรู้ว่ามีเซฟรออยู่

กฎข้อ 1 ก็คือนิสัย "เซฟก่อนสู้บอส" นี่แหละ ก่อนแตะของเสี่ยง กดเซฟไว้ก่อน แล้วค่อยลุย และเหมือนที่บท 5.4 บอกไว้ git ทำได้มากกว่าเซฟเกมตรงที่มันแตกสายขนานอย่าง branch ได้ เซฟเกมทั่วไปทำไม่ได้ นั่นคือเหตุผลที่งานเสี่ยงหนักคุณเลือก branch ไม่ใช่ commit ภาพเซฟเกมเป็นแค่หมุดช่วยจำ ตัววินัยจริงคือกฎข้อ 1

สรุป ความกลัวที่ลบทิ้งได้

กลับไปที่ภาพตอนต้น เช้านี้มันดี ตอนนี้มันพัง และคุณกลัวว่าจะกลับไปหาเช้านี้ไม่เจอ ความจริงคือ ถ้าเช้านี้มีจุดถอย คุณกลับไปได้เสมอ ทุกความผิดพลาดในการ vibe coding ที่ดูเหมือนหายนะ จริง ๆ แล้วย้อนกลับได้ ถ้าคุณทำจุดถอยไว้ก่อน

เครื่องมือ git คุณรู้จักจากบทก่อนแล้ว บทนี้เติมสิ่งที่เหลือคือวินัยการใช้มัน สามอย่าง หนึ่ง กฎข้อ 1 ไม่มีจุดถอย ไม่แตะ สอง commit คือความปลอดภัย ไม่ใช่ความเสี่ยง ยิ่งเซฟถี่ยิ่งปลอดภัย สาม เลือกระหว่าง commit กับ branch ตามกฎ ถอย commit เดียวจบใช้ commit แตะของทั้งกองพร้อมกันใช้ branch เท่านี้ความกลัว "แก้แล้วกลับไม่ได้" ก็หมดไป ไม่ใช่เพราะคุณเก่งขึ้น แต่เพราะคุณกางแหไว้ก่อนทุกครั้ง

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


อ่านต่อ: การเปลี่ยนทีละนิด

แหล่งอ้างอิง