- มีรายงานว่าในสภาพแวดล้อม macOS การเปลี่ยนแปลงในโปรเจ็กต์ถูก ลบโดยอัตโนมัติทุก ๆ 10 นาที
- จากการตรวจสอบ พบว่าสาเหตุไม่ได้มาจาก Claude Code แต่เป็น เครื่องมืออัตโนมัติแบบโลคัลอีกตัวที่ผู้ใช้สร้างขึ้นเอง ซึ่งรัน
git reset --hard origin/main เป็นระยะผ่าน GitPython
- เนื่องจากใช้ ไดเรกทอรีทำงาน เดียวกัน จึงทำให้ดูเหมือนว่า Claude Code เป็นต้นเหตุ แต่จริง ๆ แล้วเป็นสคริปต์ภายนอกที่ทำการรีเซ็ต
- ทีม Claude Code ชี้แจงอย่างชัดเจนว่าไม่มีลอจิกสำหรับรันคำสั่งดังกล่าวในโค้ดภายใน และอธิบายว่าพฤติกรรมคล้ายกันจะเกิดขึ้นได้ก็ต่อเมื่อใช้ตัวเลือก
--dangerously-skip-permissions เท่านั้น
- สุดท้ายจึงสรุปว่าอีชูนี้ ไม่ใช่บั๊กของ Claude Code แต่เป็นปัญหาจากเครื่องมือของผู้ใช้เอง และมีการแก้ชื่อเรื่องก่อนปิดอีชู
อาการของปัญหาและสภาพแวดล้อม
- พบว่า Claude Code ทำ
git fetch origin และ git reset --hard origin/main ทุก ๆ 10 นาที ในรีโพซิทอรีโปรเจ็กต์ของผู้ใช้
- พฤติกรรมนี้จะ ลบการเปลี่ยนแปลงทั้งหมดของไฟล์ที่ถูกติดตามแต่ยังไม่ได้ commit ขณะที่ไฟล์ที่ยังไม่ถูกติดตามจะยังคงอยู่
- ในสภาพแวดล้อม Git worktree จะไม่เกิดการรีเซ็ตลักษณะนี้
- ข้อมูลสภาพแวดล้อม
- เวอร์ชัน Claude Code: 2.1.87 (Homebrew cask, Bun binary)
- OS: macOS 15.4 (Darwin 25.3.0, arm64)
- Shell: zsh
กระบวนการตรวจสอบ
- ใน Git reflog มีบันทึก
reset: moving to origin/main มากกว่า 95 ครั้ง โดยเกิดขึ้นทุก ๆ 10 นาที
- แม้ offset ของแต่ละเซสชันจะต่างกัน แต่ภายในแต่ละเซสชันจะเกิดซ้ำทุก 600 วินาทีอย่างแม่นยำ
- ใน การทดสอบจำลองแบบเรียลไทม์ ไฟล์ที่ถูกติดตาม (
api.ts) จะถูกคืนกลับสภาพเดิมเมื่อถึงจังหวะรีเซ็ต ส่วนไฟล์ที่ไม่ถูกติดตาม (.canary-test.txt) ยังคงอยู่
- จากการเฝ้าดูไดเรกทอรี
.git/ ด้วย fswatch พบแพตเทิร์นที่ไฟล์ .git/refs และ .git/logs/HEAD ถูกแก้ไขในช่วงเวลาที่เกิดการรีเซ็ต
- ผลจาก lsof พบว่ามีเพียง Claude Code CLI เท่านั้นที่ใช้ CWD ของรีโพซิทอรีดังกล่าว
- ไม่พบ process ของ git ภายนอก จึงคาดว่าอาจถูกทำงานภายในผ่าน libgit2 หรือวิธีที่คล้ายกัน
- ในสภาพแวดล้อม worktree ไม่พบบันทึกการรีเซ็ตใน reflog เลย
สาเหตุที่ถูกตัดทิ้ง
- ยืนยันแล้วว่า ไม่เกี่ยวข้อง กับ Git hooks, Claude Code user hooks, การอัปเดตปลั๊กอิน, การซิงก์คลาวด์ของ macOS, Cron/LaunchAgents, IDE, Time Machine, เครื่องมือเฝ้าดูไฟล์ ฯลฯ
- แต่ละรายการถูกตัดทิ้งจากการตรวจสอบไฟล์คอนฟิกและ process จริง
การวิเคราะห์ไบนารี (บางส่วน)
- ในไบนารีของ Claude Code มีบางฟังก์ชันที่รวมโค้ดสำหรับรันคำสั่ง
["fetch","origin"]
- แม้จะมีฟังก์ชัน wrapper ของ
git pull และลอจิกจัดการสถานะ fileHistory แต่ไม่พบ ตัวจับเวลาแบบทุก 10 นาที
ผลกระทบ
- การเปลี่ยนแปลงที่ยังไม่ได้ commit ถูก ลบอัตโนมัติทุก 10 นาที ทำให้ระหว่างเซสชัน 2 ชั่วโมง การแก้ไขหายไปมากกว่า 3 ครั้ง
- เมื่อ commit การเปลี่ยนแปลงทั้งหมดแล้ว การรีเซ็ตจะไม่มีผล จึงทำให้ปัญหานี้ดูเหมือนเกิดขึ้นเป็นพัก ๆ
คำตอบจากทีม Claude Code
- Jarred-Sumner ระบุอย่างชัดเจนว่า “ใน Claude Code เองไม่มีโค้ดที่รัน
git reset --hard origin/main”
- เขาอธิบายว่าเมื่อใช้ตัวเลือก
--dangerously-skip-permissions Claude จะสามารถ รันคำสั่งเชลล์ได้โดยไม่ต้องถามยืนยัน และหากใช้คำสั่ง /loop 10m <prompt> เพื่อให้ร้องขอ “ซิงก์กับรีโมต” เป็นระยะ ก็อาจรัน git fetch && git reset --hard origin/main ได้
- วิธีตรวจสอบที่แนะนำคือ
grep -r "reset --hard" ~/.claude/projects/ เพื่อค้นหาใน session log
- รัน
claude --debug-file /tmp/debug.txt --dangerously-skip-permissions แล้วรอ 10 นาที จากนั้นค้นหา grep -i bash /tmp/debug.txt | grep reset
- ฟีเจอร์
fileHistory ของ Claude Code ไม่เกี่ยวข้องกับ git และภายในก็ไม่ได้เรียก git reset
ข้อสรุปสุดท้าย
- ในอัปเดตวันที่ 30 มีนาคม 2026 ยืนยันว่า ต้นตอที่แท้จริงของปัญหาไม่ใช่ Claude Code แต่เป็นเครื่องมือโลคัลอีกตัวของผู้ใช้
- เครื่องมือนั้นใช้ GitPython เพื่อทำ hard reset ทุก 10 นาที และกำลังเฝ้าดูไดเรกทอรีเดียวกับ Claude Code
- อีชูนี้ถูกปิดด้วยสถานะ “not planned” และชื่อเรื่องถูกแก้จาก “Claude Code ทำการรีเซ็ต” เป็น “เครื่องมืออัตโนมัติของฉันทำการรีเซ็ต”
วิธีแก้ชั่วคราว
- เมื่อใช้ git worktree จะไม่ได้รับผลกระทบจากการรีเซ็ต
- สามารถป้องกันการเปลี่ยนแปลงสูญหายได้ด้วยการ commit บ่อย ๆ
อีชูที่เกี่ยวข้อง
#8072 — ปัญหาที่การแก้โค้ดถูกย้อนกลับซ้ำ ๆ
#7232 — เกิดการสูญหายของข้อมูลจากการรัน git reset --hard โดยไม่มีการอนุมัติ
#32793 — ปัญหาที่คำสั่ง claude install เปลี่ยน git remote URL ผิด (คล้ายกันแต่เป็นอีกกรณีหนึ่ง)
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
นี่คือ อัปเดต ที่ผู้เขียนโพสต์เอง
ตามลิงก์ issue ต้นตอของปัญหาไม่ใช่ Claude Code แต่เป็นบั๊กในเครื่องมือที่ผู้เขียนทำไว้สำหรับทดสอบบนเครื่องโลคัล
เครื่องมือนั้นพยายามซิงก์ working directory บนเครื่องกับรีโมต และทำ hard reset ทุก ๆ รอบ จนลบการเปลี่ยนแปลงที่ยังไม่ได้ commit ทั้งหมด
ถ้าเปลี่ยนชื่อเรื่องเป็นประมาณว่า “นักพัฒนาสร้างสคริปต์ที่รีเซ็ต git repo ทุก 10 นาทีแล้วดันลืม ก่อนจะโทษ Claude Code” ฉันจะยกเลิก flag ให้
ปัญหาที่แท้จริงคือ ขีดคู่ ในชื่อเรื่องถูก HN แปลงเป็น en dash อัตโนมัติ
ฉันก็ลองสืบเรื่องนี้เองเหมือนกัน และ ในตัว Claude Code ไม่มีโค้ดที่รัน
git reset --hard origin/mainเป็นไปได้มากกว่าว่านักพัฒนาจะรันคำสั่งอย่าง
/loop 10mหรือสร้าง cron job ที่คอยรีเซ็ต git ทุก 10 นาทีที่บอกว่ามอนิเตอร์โปรเซสทุก 0.1 วินาทีแล้วไม่เห็นโปรเซส git นั้นฟังดูไม่น่าเชื่อ
คำสั่ง git เร็วเกินกว่าจะจับได้ด้วยช่วงเวลาแค่นั้น
ทางที่ดีกว่าคือห่อ
gitใน$PATHแล้ว บันทึก log ทุกครั้งที่มีการรันถึงขั้นอาจส่งแบบ “agentic” โดยไม่มีอินพุตจากผู้ใช้เลยก็ได้ (เดาล้วน ๆ)
ลิงก์ issue
โพสต์นี้อาจทำให้คน เข้าใจผิด ว่าปัญหาของบุคคลหนึ่งเป็นปัญหาของทั้งระบบ
ดูเหมือนน่าจะมี ความเสียหายของคอนเท็กซ์ อยู่บ้าง
Claude เคยพังงานด้วยลำดับ
stash→ แทนที่ด้วยsed→ ชน conflict →reset --hardเลยเขียนคำเตือนไว้บนสุดของ
CLAUDE.mdว่า“ห้ามแทนที่จำนวนมากด้วย
sed, ห้ามgit push --force,git reset --hardและ คำสั่ง git แบบทำลายล้างทุกชนิด”หลังจากนั้นก็ดีขึ้นมาก
ถ้าใส่ hook เพื่อบล็อกคำสั่ง git บางตัว ก็จะปลอดภัยได้โดยไม่ต้องขึ้นอยู่กับความไม่แน่นอนของการคาดเดาของโมเดล
เรื่องแบบนี้ทำให้รู้สึกว่าหลายคนลืมหลักพื้นฐานของวิศวกรรมสมัยก่อน — กระบวนการที่กำหนดแน่นอนและทำซ้ำได้ — ไปแล้ว
ฉันก็เคยเจอปัญหาคล้ายกัน
ปกติฉันรัน claude-code ใน sandbox (bwrap, srt) แต่ถ้ารันข้างนอก มันจะเรียก
ghทุกครั้งที่ลบ/commandหรือปิดเมนูเพราะฉันใช้ KeepassXC เป็นตัวจัดการความลับ จึงมีป๊อปอัปขออนุมัติเด้งขึ้นมาทุกครั้ง เลยสังเกตเห็นได้ทันที
พอถาม Claude ก็ได้คำตอบว่าสาเหตุมาจาก ฟีเจอร์ git context
KeepassXC ไม่รองรับการอนุญาตแบบใช้ได้ทั้ง session สุดท้ายเลยต้องยืนยันตัวตนทุกครั้ง
ถ้ามีการตั้งค่าสิทธิ์ ก็น่าจะกันเรื่องแบบนี้ได้ไม่ใช่หรือ
แต่ผู้ใช้รันด้วยออปชัน
--dangerously-skip-permissionsเอง ก็ต้องยอมรับพฤติกรรมที่คาดเดาไม่ได้จะตีความว่ามันถูกเลี่ยงได้ด้วย prompt injection ก็ยังได้
กฎที่กัน hard reset ไม่ได้ก็เป็นแค่ของโชว์
ผู้เขียนออกมาบอกเองว่าสาเหตุไม่ใช่ Claude Code แต่เป็นบั๊กในเครื่องมือทดสอบบนเครื่องที่ตัวเองสร้างขึ้น
ลิงก์ issue
ถ้าใช้ เครื่องมือพัฒนาแบบ binary blob บน SaaS ก็ไม่น่าแปลกใจที่จะเจอปัญหาแกะรอยยากแบบนี้
สุดท้ายผู้ใช้ก็หาสาเหตุได้เอง และ ต้นเหตุก็คือเครื่องมือของตัวเอง
เรื่องแบบนี้เคยเกิดมาก่อนและยังเกิดอยู่เสมอ
ต่อให้ไม่มี LLM ช่วย ฉันก็เคยทำพังด้วยมือตัวเองได้ดีพอ ๆ กันหลายครั้ง
เพราะงั้นฉันเลยพัฒนางานโดยเปิด Time Machine ของ Mac ไว้ตลอด
ตอนที่ Claude ลบไฟล์ ถ้ามีข้อความถามว่า “จะกู้คืนไหม?” ก็แทบรู้สึกเหมือน Claude เองยังโล่งใจ
แบ็กอัปคือ เส้นชีวิต จริง ๆ