返回首页

Claude Code Bug:每 10 分钟 Git reset 一次

Claude Code 2.1.87 在 macOS 上每 10 分钟执行隐藏的 git reset,破坏未提交更改。调查排除了外部原因,建议检查 reflog 并通过 worktrees 和 DISABLE_CRON 进行保护。

严重的 Claude Code Bug:每 10 分钟丢失代码
Advertisement 728x90

# Claude Code 每10分钟偷偷重置 Git 变更

macOS 上的 Claude Code 版本 2.1.87 每 600 秒自动执行 git fetch origingit 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 中的时间偏移在单个会话内一致,但不同运行之间有所差异,这表明是一个内部定时器在起作用。

Google AdInline article slot

CHANGELOG 中提到可以使用 CLAUDE_CODE_DISABLE_CRON 来禁用周期性任务。这个 bug 在频繁提交时不易察觉——Claude Code 鼓励频繁提交,从而使重置无害。问题在长时间使用未完成变更时显现:2 小时内至少丢失 3 次编辑。

GitHub 上的类似投诉缺乏深入分析。Anthropic 尚未发表评论。

如何检查并保护自己

检查 reflog:

Google AdInline article slot
git reflog | grep "reset: moving to origin"

查找间隔 10 分钟的条目。

保护措施:

  • 每 5–7 分钟提交变更。
  • 使用 git worktree:它们完全隔离于重置操作。
  • 使用 CLAUDE_CODE_DISABLE_CRON=1 运行以禁用内部 cron。

worktree 的创建方式如下:

Google AdInline article slot
git worktree add ../project-worktree main

在它们之间切换可防止数据丢失。

要点

  • 每10分钟自动重置:清除已跟踪文件中的未提交变更。
  • 内部定时器:与会话启动相关,可通过 CLAUDE_CODE_DISABLE_CRON 控制。
  • macOS 2.1.87 可复现:使用 libgit2 无需外部进程。
  • worktree 作为解决方案:完全免疫此 bug。
  • 检查 reflog:诊断项目问题的关键。

— Editorial Team

Advertisement 728x90

继续阅读