Claude Code 存在重大 Bug,每 10 分钟自动执行 `git reset --hard origin/main`,可能导致未提交工作丢失,程序员需要立即了解。
根本原因已确定——这不是Claude Code的bug。这些重置是由我本地运行的一个独立工具导致的,该工具使用GitPython在轮询周期中硬重置工作目录。证据之所以误导,是因为该工具与Claude Code监控的项目共享相同的CWD。详见我下面的评论。对虚假报告致歉。
Claude Code通过编程方式的git操作(未生成外部git二进制文件)每10分钟对用户的项目仓库执行git fetch origin + git reset --hard origin/main。这会静默销毁所有对追踪文件的未提交更改。未追踪的文件不受影响。Git worktrees不受影响。
Claude Code版本:2.1.87(Homebrew cask,编译的Bun二进制)
OS:macOS 15.4(Darwin 25.3.0, arm64)
e8ea2c9 HEAD@{2026-03-29 22:19:09 +0200}: reset: moving to origin/main
e8ea2c9 HEAD@{2026-03-29 22:09:09 +0200}: reset: moving to origin/main
e8ea2c9 HEAD@{2026-03-29 21:59:09 +0200}: reset: moving to origin/main
e8ea2c9 HEAD@{2026-03-29 21:49:09 +0200}: reset: moving to origin/main
...
8792b6c HEAD@{2026-03-29 16:55:41 +0200}: reset: moving to origin/main
8792b6c HEAD@{2026-03-29 16:45:41 +0200}: reset: moving to origin/main
...
32aa7c7 HEAD@{2026-03-28 15:47:36 +0100}: reset: moving to origin/main
32aa7c7 HEAD@{2026-03-28 15:37:36 +0100}: reset: moving to origin/main
第二个时间偏移量在每个会话内保持一致,但在不同会话间变化(:08、:36、:41、:09),证实了一个与会话启动时间绑定的600秒间隔定时器。在约36小时内的4个会话中观察到95+条记录。
修改 src/lib/api.ts(追踪文件)并创建 .canary-test.txt(未追踪文件)
每15秒监控一次
在下一个10分钟标记时,api.ts 静默还原——修改消失
.canary-test.txt(未追踪)幸存下来
在连续4个周期中一致重现
在精确的重置时间,fswatch 对 .git/ 的监控捕获到:
23:59:10.349 .git/refs/remotes/origin/HEAD.lock Created IsFile Removed AttributeModified
23:59:10.352 .git/logs/HEAD IsFile Updated
23:59:10.354 .git/refs/heads/main.lock Created IsFile Removed AttributeModified
这是 git fetch origin + git reset --hard origin/main 的经典模式。
lsof 确认Claude Code CLI进程(PID 70111,claude --dangerously-skip-permissions)是唯一在受影响仓库中具有CWD的进程。另外两个Claude CLI会话在不同的目录中。
在重置时间周围以0.1秒间隔进行的进程监控发现零个git进程。这些操作是编程方式(libgit2或类似)在Claude Code进程内进行的,由.git/锁文件创建而无任何外部进程确认。
worktree reflog显示零个 reset: moving to origin 条目。重置仅针对主工作树。
从 /opt/homebrew/Caskroom/claude-code/2.1.87/claude 处的编译二进制:
hg1() 函数通过 t_(C8(), _) 执行 ["fetch","origin"],没有显式CWD,默认为 process.cwd()
io1() 函数是git pull包装器,记录 git pull: cwd=${H} ref=${_??"default"}
fileHistory 状态跟踪 {snapshots: [], trackedFiles: new Set, snapshotSequence: 0}
确切的定时器/setInterval设置无法在缩小化代码中识别
主工作树中对追踪文件的任何未提交更改都会每10分钟被静默销毁。在2小时的会话中,在找到原因前,更改必须被重新应用3次以上。当所有更改都被提交时(重置是无操作),该bug是无形的,使其显示为间歇性的。
什么内部机制每600秒对 process.cwd() 运行 git fetch origin + git reset --hard?由于编译的二进制和缺乏sudo进行进程追踪权限,无法从外部确定这一点。
使用 git worktrees——已确认免疫(worktree reflog中零个重置条目)
频繁提交——已提交的更改在重置中幸存
Critical Bug: Code Revisions Being Repeatedly Reverted #8072 — "Critical Bug: Code Revisions Being Repeatedly Reverted"
[MODEL] CRITICAL: Claude executed git reset --hard without authorization causing data destruction #7232 — "CRITICAL: Claude executed git reset --hard without authorization causing data destruction"
[BUG] claude install corrupts project git remote URL to anthropics/claude-plugins-official on macOS #32793 — "claude install corrupts project git remote URL"(marketplace git在错误的目录中——相关但不是这个具体的bug)