Cursor 给你生成了一段漂亮的 diff,你点 Apply(聊天框里的按钮,或者去 accept 暂存的改动),右下角转了一下圈——然后什么都没发生。文件没改,有时还会冒出 The apply model made no changes to the file,agent 的 status 也没变。这不是普通崩溃。Cursor 的 apply 步骤会把 diff 交给一个独立的 “apply model” 处理(它负责把建议的改动和磁盘上的文件做对账,并不是字面意义的 patch),所以任何阻塞写入或让文件失同步的因素,都会让它静默放弃。
最快修复(能解掉大部分情况): 用 cmd-shift-s / ctrl-shift-s 保存所有打开的文件,关掉所有其他打开同一项目的 VS Code、Cursor 或编辑器窗口,然后点聊天里的 Reapply 或按 cmd-enter / ctrl-enter。如果 diff 仍显示成未应用,去 Cursor Settings -> Agents -> Inline Diffs 把它关掉再打开,然后重试。
这篇按命中率从高到低拆出 6 个根因,教你怎么判断自己属于哪一类,并给出每类的精确修复。基于 Cursor 3.7(2026 年 6 月)实测。
先判断你属于哪一类
| 你看到的症状 | 最可能的原因 | 跳到 |
|---|---|---|
| Apply 按钮变灰一秒后回弹,没有任何改动 | 编辑面板用错了 / detached buffer | 原因 1 |
提示 The apply model made no changes to the file | 文件失同步或写入被锁 | 原因 2 / 原因 5 |
| 小文件能改、大文件失败(提示 file too large) | 文件或 diff 太大 | 原因 6 |
| Apply 后 diff 一直不消失 | 生成后 base 变了 | 原因 5 |
| 直接应用没有 Accept/Reject 的 diff,或一个都不应用 | Inline Diffs 设置回归 | 原因 1 |
network 标签里出现 401 / 403 / timeout | 客户端过旧或模型端故障 | 原因 3 |
连对该文件 touch 都失败 | 文件系统只读 / 权限不足 | 原因 4 |
常见原因
1. 编辑面板用错了,或 Inline Diffs 设置被搞掉了
Cursor(3.x)有好几种编辑面板:Chat / Ask(cmd-l)只回答不写文件,Inline(cmd-k)只改光标处,Composer / Agent(cmd-i)跨文件改,在 Cursor 2.x、3.x 里是默认面板。如果你在 Ask/Chat 的回答里点 Apply,而目标文件又不是当前活跃的编辑器,apply 经常会静默跳过,因为它是在对一个 detached buffer 做对账。
还有一种更新的变种(2026 年初出现的回归):改动要么完全没有 Accept/Reject 的 diff 就直接应用,要么一个都不应用。这其实是 Inline Diffs 开关的问题,并不是真正的 apply 失败。
症状:Chat 里 diff 显示完整,按 Apply,按钮变灰一秒后回弹,没改动
原因:apply 对的是一个 detached 文件 buffer,或者 Inline Diffs 被关了
如何判断: 换到 Composer/Agent(cmd-i)重新跑一遍 prompt。如果在那里能 apply,就是你之前用错了面板。如果 diff 根本没出现 Accept/Reject 控件,就去 Cursor Settings -> Agents -> Inline Diffs 把它关掉再打开。
2. 文件被别的进程或 git 锁了
.git/index.lock、.git/HEAD.lock、运行中的 next dev / vite 文件 watcher,或另一个打开同一文件的 VS Code / Cursor 窗口,都可能占着写入。Cursor 不会弹”被锁”对话框,它要么返回 The apply model made no changes to the file,要么干脆什么都不做。
如何判断:
ls -la .git/*.lock # 残留锁文件
lsof | grep <filename> # 谁打开了这个文件(macOS/Linux)
有残留 lock,或别的进程占着文件,就是这个原因。
3. Cursor 客户端过旧,或模型端在抖
Cursor 更新很快(大约每周一版,2026 年 6 月的当前版本是 3.7)。旧客户端的 apply 协议有时不兼容新模型。这一类的另一半是服务端故障:Cursor 的 Auto 模型路由和上游 Anthropic 模型都出现过短时降级(比如 2026 年 6 月 16 日,状态页就记录了 Anthropic 模型一片报错升高、以及 Auto 模型降级,现已恢复)。当 apply 端降级时,apply 会安静地空转。
如何判断:
- 看
Cursor -> About(或Help -> About):版本是否落后超过约 2 周? Cursor Settings -> Models:换一个模型(或从 Auto 切到一个固定模型)重试。换个模型立刻成功,就指向端点问题。- 开发者工具(
cmd-shift-p->Developer: Toggle Developer Tools):Network 标签有没有401/403/ timeout? - 到 status.cursor.com 看有没有进行中的故障。
4. 文件系统只读,或写权限被拒
WSL 跨盘符(/mnt/c/...)、Docker 容器内挂的 read-only volume、macOS 没给 Cursor 授 Full Disk Access、NFS / SMB 网络盘,都可能拒绝写入。
如何判断:
touch path/to/the-file-you-want-to-edit # 看到底能不能写
ls -l path/to/the-file # 检查权限位
stat -f %Sp path/to/the-file # macOS 权限字符串
连 touch 都失败,就是文件系统层的问题,不是 Cursor 的 bug。
5. Diff 的 base 和磁盘内容不一致(“file changed since”)
如果在 Cursor 生成 diff 到你点 Apply 之间,你又手动改了文件(或跑了 formatter),base 不匹配就会导致静默跳过或 The apply model made no changes to the file。常见触发:prettier --write 或别的 format-on-save、git pull、agent 在后台又生成了一版。
如何判断: Cursor 状态里把文件标成已修改,或者 Apply 后 diff 仍然完整展示,没有收起成”已应用”。
6. 文件太大,或 diff 太大
Cursor 的 apply model 有实际的体积上限。很大的文件、或者动辄几百行的 diff,可能触发 file too large 这类拒绝,或者直接静默空转——哪怕同一个 prompt 在小文件上没问题。Cursor 2.x、3.x 的多文件 agent 流程让这种情况更常见了。
如何判断: 同一个 prompt 在小文件上能正常应用,到大文件就失败;或者 agent 干脆建议把整个文件重写一遍,而不是就地改。
最短修复路径
按耗时从短到长。Step 1 和 Step 2 能解掉大部分”按 Apply 没反应”。
Step 1:保存所有打开文件,再关掉其他编辑器窗口
cmd-shift-s / ctrl-shift-s 保存全部(File -> Save All)
然后关掉所有其他打开同一项目的 VS Code / Cursor / Sublime 窗口
跨工具同时打开同一文件是第一大触发原因。关闭后回 Cursor 按 cmd-enter / ctrl-enter,或点 Reapply。
Step 2:换个编辑面板重跑,或重置 Inline Diffs
如果你是在 Ask/Chat 里 apply 失败:
- 用
cmd-i打开 Composer/Agent。 - 重新跑 prompt,让它重新生成 diff。
- Composer/Agent 会把每个文件暂存成可审阅的 diff,写入前带 per-file 的 Accept / Reject,这条 apply 路径比 Ask/Chat 更可靠。
或者直接在文件里用 cmd-k(Inline)选中要替换的代码块就地改。apply 成功率上 Inline 高于 Composer 高于 Ask/Chat,因为作用范围越小,出错的方式越少。
如果根本不出现 Accept/Reject 的 diff,就重置一下:Cursor Settings -> Agents -> Inline Diffs,关掉再打开,然后重试。
Step 3:清理 git lock 和卡死的文件 watcher
# 清理 git 锁
rm -f .git/index.lock .git/HEAD.lock
# 看谁在占用文件
lsof | grep src/components/UserSettings.tsx
# 关掉占用进程
kill -9 <pid>
# 重启 dev server(watcher 卡死也会阻塞写入)
pkill -f "next dev"
pkill -f "vite"
然后点聊天面板里的 Retry / Reapply,或按 cmd-enter / ctrl-enter。
Step 4:升级 Cursor,并换一个模型
1. Cursor -> Check for Updates -> 重启(2026 年 6 月建议升到 3.7+)
2. Cursor Settings -> Models -> 换模型
(比如 Auto -> 固定的 Sonnet 4.6,或 Sonnet 4.6 <-> Opus 4.7,
或者试试 Composer 2.5)
3. 重新跑 prompt,再 Apply
如果固定模型立刻成功、而 Auto 失败,说明路由或原模型端点在抖。到 status.cursor.com 确认一下。
Step 5:检查文件系统权限,并从 native 路径打开项目
# 测试到底能不能写
touch /path/to/project/src/file.tsx && echo OK || echo "no write permission"
# macOS:System Settings -> Privacy & Security -> Full Disk Access -> 勾上 Cursor
# Linux / WSL:
chmod -R u+w /path/to/project
# 别在 /mnt/c/... 下开项目,挪到 ~/projects/ 这种 native filesystem
Cursor 在 read-only mount 上不会报 “permission denied”,只会安静地不 apply。
Step 6:缩小改动,或手动 apply 兜底
如果文件很大、或 diff 很笼统:
- 让 agent 改一个更小、更聚焦的范围(一次只改一个函数或一段区域)。
- 如果还是拒绝,就在聊天里选中 diff,
cmd-c,打开目标文件手动改。 - 用
git diff验证。
手动 apply 不优雅,但能立刻 unblock 你。
怎么确认已经修好
- 聊天里的 diff 从完整展开收起成”已应用 / 已接受”。
- 编辑器标签显示了新内容(未保存时还会有个修改小圆点)。
git diff path/to/file显示出预期的改动。- 重跑一个最简单的 prompt(比如加一行注释),第一次就能干净应用。
预防建议
- 同一文件不要多工具同时编辑,关掉其他 VS Code / Cursor 窗口。
- Cursor 开自动更新(
Cursor Settings -> General -> Update)。 - 把
.git/*.lock清理加进 dev 启动脚本。 - 项目别放在 WSL
/mnt/c/...或网络盘上,用 native filesystem。 - 文件特别大(超过约 2000 行)更容易 apply 失败,先用 Composer/Agent 拆成小 patch。
Cursor Settings -> Beta里关掉非必需的实验功能,新功能 bug 多。- macOS 给 Cursor 授 Full Disk Access,避免沙盒拦写。
常见问题
为什么 Cursor 提示 “The apply model made no changes to the file”? apply model 把建议的 diff 和文件对账后发现没什么可写,通常是因为生成 diff 之后文件又变了(原因 5)、写入被锁(原因 2)、或文件太大(原因 6)。重新跑一遍 prompt 让 diff 基于当前文件重建,再 Reapply。
什么是 “apply model”?为什么 apply 不是直接打 patch? Cursor 先用主模型生成改动,再交给一个独立、更快的 apply model 把改动并进你的文件。这样能处理模糊匹配和局部改动,但也意味着只要这条 apply 路径在服务端降级,哪怕 diff 看着完美,Apply 也会静默空转。
在 Chat 里能 apply,但 diff 就是不生效。Composer 有什么不一样?
Composer/Agent(cmd-i)会把改动暂存成 per-file 的 diff,写入前先 Accept / Reject,而且它是明确针对文件的,不像 Chat 可能对着一个 detached buffer。所以它的 apply 路径更可靠。改单个代码块时,Inline(cmd-k)更可靠。
突然不弹 Accept/Reject 就直接应用了,是 bug 吗?
那是 Inline Diffs 设置,不是 apply 失败。去 Cursor Settings -> Agents -> Inline Diffs 关掉再打开。如果你想每次写入前都先审阅,保持 Inline Diffs 打开,别开 auto-accept。
怎么判断是 Cursor 故障而不是我自己的问题?
在 Cursor Settings -> Models 里把 Auto 换成一个固定模型。固定模型立刻能 apply,就说明是路由或上游模型在降级。到 status.cursor.com 确认。