# Claude Code 每10分钟偷偷重置 Git 变更
macOS 上的 Claude Code 版本 2.1.87 每 600 秒自动执行 git fetch origin 和 git reset --hard origin/main。这会导致仓库中已跟踪文件的所有未提交变更丢失。一位开发者使用 git reflog 在四个会话的 36 小时内记录了超过 95 次此类操作。
复现确认了这个问题:已跟踪文件的变更会在正好 10 分钟后回滚,而未跟踪文件保持不变。文件系统监控显示,在不启动任何外部 git 进程的情况下,.git/refs/remotes/origin/HEAD 和 .git/refs/heads/main 中创建了锁文件。这些操作嵌入在 Claude Code 进程中,很可能是通过 libgit2 实现的。
调查原因
已排除外部因素:git hooks、cron 任务、云同步服务、IDEs、Time Machine、文件监视器、插件。唯一有访问权限的进程是使用 --dangerously-skip-permissions 标志运行的 Claude Code。reflog 中的时间偏移在单个会话内一致,但不同运行之间有所差异,这表明是一个内部定时器在起作用。
CHANGELOG 中提到可以使用 CLAUDE_CODE_DISABLE_CRON 来禁用周期性任务。这个 bug 在频繁提交时不易察觉——Claude Code 鼓励频繁提交,从而使重置无害。问题在长时间使用未完成变更时显现:2 小时内至少丢失 3 次编辑。
GitHub 上的类似投诉缺乏深入分析。Anthropic 尚未发表评论。
如何检查并保护自己
检查 reflog:
git reflog | grep "reset: moving to origin"
查找间隔 10 分钟的条目。
保护措施:
- 每 5–7 分钟提交变更。
- 使用 git worktree:它们完全隔离于重置操作。
- 使用
CLAUDE_CODE_DISABLE_CRON=1运行以禁用内部 cron。
worktree 的创建方式如下:
git worktree add ../project-worktree main
在它们之间切换可防止数据丢失。
要点
- 每10分钟自动重置:清除已跟踪文件中的未提交变更。
- 内部定时器:与会话启动相关,可通过
CLAUDE_CODE_DISABLE_CRON控制。 - macOS 2.1.87 可复现:使用 libgit2 无需外部进程。
- worktree 作为解决方案:完全免疫此 bug。
- 检查 reflog:诊断项目问题的关键。
— Editorial Team
暂无评论。