วิธีย้อนกลับการเปลี่ยนแปลงที่เอเจนต์เขียนโค้ด AI ทำไว้
ย้อนการแก้ไขของเอเจนต์เขียนโค้ด AI อย่างปลอดภัย: กู้คืนไฟล์เดียว ทิ้งงานที่ยังไม่ได้ commit หรือ revert commit ของเอเจนต์ โดยไม่เสียงานของคุณเอง
หากต้องการย้อนการเปลี่ยนแปลงของเอเจนต์เขียนโค้ด AI ให้ตรวจก่อนว่าอะไรเปลี่ยนไป แล้วใช้คำสั่ง Git ที่ตรงกับกรณี: git restore สำหรับไฟล์ที่ถูกแก้ git clean สำหรับไฟล์ใหม่ และ git revert สำหรับ commit เก็บสำเนาสำรองด้วย git stash ก่อน /rewind ของ Claude Code เองก็กู้คืนโค้ดได้ แต่ไม่ได้ติดตามการเปลี่ยนแปลงทุกอย่าง
คู่มือนี้เริ่มจากจุดที่คุณตัดสินใจทิ้งงานแล้ว ส่วนการตรวจโค้ดที่ AI แก้ช่วยให้คุณตัดสินใจ Mono แสดงว่าอะไรเปลี่ยนไป แต่ไม่ได้ย้อนกลับให้ คำสั่งที่ใช้จึงเหมือนกันเมื่อทำงานผ่าน Mono
1. หยุดเอเจนต์แล้วดูว่าอะไรเปลี่ยน
ก่อนอื่น ให้หยุดเอเจนต์ ใน Mono ปุ่มส่งจะกลายเป็นปุ่มยกเลิกขณะที่เอเจนต์ทำงาน ในเทอร์มินัลที่เปิดอยู่ในโฟลเดอร์โปรเจกต์ ให้รัน:
git status
git log --oneline -5คำสั่งแรกแสดงไฟล์ที่ถูกแก้ ถูกลบ ที่ stage แล้ว และไฟล์ใหม่ คำสั่งที่สองแสดง commit ล่าสุด รวมถึง commit ที่เอเจนต์ทำ จดไว้ว่าการเปลี่ยนแปลงไหนเป็นของคุณ เพราะคำสั่งย้อนกลับไม่รู้ว่าใครเขียนบรรทัดไหน
| สิ่งที่เห็น | วิธีย้อนกลับ |
|---|---|
| ไฟล์ที่ถูกแก้หรือถูกลบ และยังไม่ได้ stage | git restore <path> |
| การเปลี่ยนแปลงที่ stage แล้ว | git restore --staged <path> แล้วจึงย้อนไฟล์ |
| ไฟล์ใหม่ที่ Git ยังไม่ติดตาม | git clean -n <path> แล้วตามด้วย git clean -f <path> |
| commit ที่คุณไม่ต้องการ | git revert <commit> |
ใน Mono “แสดงการเปลี่ยนแปลง” จะแสดงไฟล์ที่ถูกแก้และไฟล์ใหม่นับจาก commit ล่าสุด จึงไม่แสดง commit ที่เอเจนต์ทำไปแล้ว
2. เก็บสำเนาสำรองก่อน
คำสั่ง restore และ clean ทิ้งงานที่ยังไม่ได้ commit อย่างถาวร จึงต้องเก็บทุกอย่างไว้ก่อน:
git stash push --include-untracked -m "before undo"
git stash apply --indexคำสั่งแรกเก็บไฟล์ที่ถูกแก้และไฟล์ใหม่ แล้วทำให้ working tree สะอาด คำสั่งที่สองนำไฟล์เหล่านั้นกลับมา โดยคงสิ่งที่ stage ไว้เหมือนเดิม ทุกอย่างดูไม่ต่างจากเดิม แต่ตอนนี้ git stash list มีสำเนาชื่อ “before undo” อยู่
ถ้าย้อนมากเกินไป git restore --source "stash@{0}" <path> จะนำไฟล์ที่แก้ไว้กลับมาจาก stash ล่าสุด
3. ย้อนไฟล์เดียวหรือบางส่วนของไฟล์
เลือกคำสั่งที่มีขอบเขตแคบที่สุด:
git restore <path>ทิ้งการแก้ไขที่ยังไม่ได้ stage ในไฟล์นั้นgit restore --staged <path>เอาการเปลี่ยนแปลงออกจาก stage แต่ยังเก็บการแก้ไขไว้ในไฟล์git restore -p <path>ถามทีละส่วนที่เปลี่ยน (hunk) ซึ่งช่วยได้เมื่อคุณและเอเจนต์แก้ไฟล์เดียวกันgit clean -n <path>แสดงรายการไฟล์ที่ Git ยังไม่ติดตามซึ่งgit clean -f <path>จะลบ ระบุพาธทุกครั้ง
เอกสาร git restore อธิบายแต่ละตัวเลือก
4. ย้อนทุกอย่างที่เอเจนต์ทิ้งไว้โดยยังไม่ได้ commit
ถ้าไม่มีการเปลี่ยนแปลงใดเป็นของคุณเลย ให้ทิ้งทั้งหมดจากรากของโปรเจกต์ด้วย git restore --staged --worktree . แล้วใช้ git clean -n . และ git clean -f . สำหรับไฟล์ใหม่ ถ้ามีงานของคุณปนอยู่ ให้ทำทีละพาธ
ตัวอย่างสมมติ: คุณขอให้เอเจนต์เปลี่ยนชื่อคลาส CSS .btn-primary เป็น .button-main ในโปรเจกต์ “tidy-recipes” ก่อนหน้านี้ เอเจนต์เคย commit การอัปเดต lockfile ที่ไม่มีใครขอ รอบนี้เอเจนต์เปลี่ยนคลาสใน 3 ไฟล์ จัดรูปแบบไฟล์ที่ไม่เกี่ยวข้องใหม่ 12 ไฟล์ และสร้าง styles/tokens.css ระหว่างนั้น คุณแก้ README.md ด้วยมือ และต้องการเก็บการแก้นั้นไว้
หลังเก็บสำเนาสำรองแล้ว ให้กู้คืนไฟล์ที่เอเจนต์แก้ (ในที่นี้คือ src/ และ styles/main.css) แล้วลบไฟล์ใหม่ที่เอเจนต์สร้าง:
git restore src/ styles/main.css
git clean -n styles/tokens.css
git clean -f styles/tokens.cssอย่าใช้ git restore . ในกรณีนี้ เพราะจะทิ้งการแก้ README ของคุณไปด้วย ถ้าคุณมีการแก้ไขอยู่ใน src/ ให้ระบุไฟล์ของเอเจนต์ทีละไฟล์
ตอนนี้ git status แสดงเฉพาะ README.md และ git diff แสดงเฉพาะบรรทัดของคุณ ส่วน commit ของ lockfile ยังอยู่
5. ย้อน commit ที่เอเจนต์ทำไปแล้ว
git revert บันทึก commit ใหม่ที่กลับผลของ commit ก่อนหน้า เอกสาร git revert ระบุว่าต้องใช้ working tree ที่สะอาด จึงต้องพักการแก้ README ของคุณไว้ก่อน:
git stash push -m "readme" README.md
git revert <lockfile commit>
git stash popใช้ hash จาก git log และเพิ่ม --no-edit เพื่อข้ามตัวแก้ไขข้อความ commit คำสั่ง git stash pop นำ “readme” กลับมา และยังเหลือ “before undo” ไว้ในรายการ ตอนนี้ git status แสดงเฉพาะ README.md และ git log --oneline แสดง Revert "Update lockfile" อยู่บนสุด
สำหรับ commit ที่ push ไปแล้ว ให้ใช้ revert แทน git reset เพราะ reset เขียนประวัติใหม่ ซึ่งคนอื่นอาจมีประวัตินั้นอยู่แล้ว ถ้า commit ดูเหมือนหายไปหลัง reset หรือ rebase คำสั่ง git reflog จะแสดง commit ที่คุณเคยอยู่เมื่อไม่นานมานี้ พร้อม hash ของแต่ละ commit
6. ใช้ checkpoint ของเอเจนต์ โดยมี Git เป็นตัวสำรอง
Claude Code บันทึก checkpoint ก่อนทุกพรอมต์: รัน /rewind หรือกด Esc สองครั้งเมื่อช่องพรอมต์ว่าง เพื่อกู้คืนโค้ด บทสนทนา หรือทั้งสองอย่าง เอกสาร checkpointing ระบุข้อจำกัดไว้: การเปลี่ยนแปลงจากคำสั่ง shell ไม่ถูกติดตาม การแก้ไขจากภายนอกมักไม่ถูกบันทึก และ checkpoint ไม่ได้แทนระบบควบคุมเวอร์ชัน ฟีเจอร์นี้ใช้ได้หรือไม่ยังขึ้นกับแอปที่คุณใช้รันเอเจนต์ด้วย
ดังนั้นให้ Git เป็นทางสำรอง:
- commit หรือสร้าง branch ก่อนเริ่มแต่ละงาน เพื่อให้ “commit ล่าสุด” หมายถึง “ก่อนเอเจนต์เริ่ม”
- บอกเอเจนต์ว่าห้าม commit โดยไม่ถาม เช่น เขียนไว้ในไฟล์ AGENTS.md
- เปิดการอนุมัติไว้ โหมด YOLO ของ Mono ซึ่งยอมรับทุกคำขอของเอเจนต์ ปิดอยู่โดยค่าเริ่มต้น ดูสิ่งที่ควรตรวจก่อนอนุญาต
ใน Mono การ์ดของโปรเจกต์เปิดเทอร์มินัลในโฟลเดอร์โปรเจกต์บนคอมพิวเตอร์ของคุณได้ จากโทรศัพท์ก็ได้ (ดูคู่มือเขียนโค้ดจากระยะไกล) Mono ยังไม่เปิดให้ใช้ แต่คุณเข้าร่วมรายชื่อรอได้
