vscode git面板无限转圈是因git卡在读取暂存区(index)或比对工作区与暂存区,非网络问题;可执行git status --porcelain -z验证是否阻塞,若-c core.fsmonitor=false后恢复则说明fsmonitor崩溃,需删.git/index、运行git reset并刷新vscode。

Mac上VSCode的Git面板无限转圈、始终不显示“暂存的更改”列表,说明VSCode没能完成对当前工作区Git状态的解析——它卡在了读取暂存区(index)或比对工作区与暂存区这一步,不是网络问题,也不是没改动,而是底层Git调用没返回结果。
确认Git是否真的卡在暂存区读取
打开VSCode集成终端(Ctrl+`),执行:
git status --porcelain -z
如果命令卡住超过3秒无输出,或光标一直闪烁不返回,就证实是Git自身阻塞;若秒出结果(比如显示M file.js),那问题出在VSCode侧。
接着再试加禁用文件监听的参数:git -c core.fsmonitor=false status --porcelain -z。如果这次立刻返回,说明fsmonitor崩溃是元凶——尤其常见于Git 2.30以下版本或升级Xcode Command Line Tools后未重置索引。
强制重置Git索引并刷新VSCode状态
第一步:在终端进入你的仓库根目录(确保能看到.git文件夹)
第二步:运行rm .git/index → 这会删除损坏的索引缓存,【Git下次status会自动重建,不影响任何提交记录】
第三步:立即执行git reset(不带参数)→ 触发索引重建,同时把所有已跟踪文件的当前状态重新载入暂存区
第四步:回到VSCode,点击左下角分支名 → 选择“Refresh”(或按Cmd+Shift+P输入Git: Refresh),此时“暂存的更改”区域应立刻填充内容
禁用fsmonitor防止反复卡死
方法一:全局禁用(推荐临时排障)
终端运行:git config --global core.fsmonitor false
方法二:仅对当前仓库禁用
终端运行:git config core.fsmonitor false
注意:macOS上旧版Git(如2.28)搭配Xcode 15+的libsystem_kernel.dylib会出现fsmonitor句柄泄漏,禁用后可彻底避免转圈。重启VSCode非必需,但建议关闭再打开以清空内部Git状态缓存。
检查VSCode是否被安全软件劫持Git进程
打开活动监视器 → 搜索git → 看是否有git进程长期存在但CPU为0%、未退出;再切到终端执行which git,记下路径(通常是/usr/local/bin/git或/opt/homebrew/bin/git)
然后运行:ls -l $(which git) → 如果显示指向../Cellar/git/下的软链接,且权限为-r-xr-xr-x,基本排除权限问题
真正要查的是杀毒软件:火绒、腾讯电脑管家mac版、CleanMyMac X等会在进程启动时注入dylib。临时退出这类软件,再点VSCode左下角同步按钮——如果转圈消失,就确认是它们干扰了Git子进程通信。











