Git警告Empty last update token.的原因及解决方法
Git警告"Empty last update token."产生原因与解决方案
问题特征
执行任意Git命令都会在输出最前方打印warning: Empty last update token.,命令本身可正常执行完成,但非预期的警告输出会导致git-extensions等依赖Git标准输出解析的工具误判,比如错误提示存在未解决的合并冲突。
该问题跟随仓库.git目录传播,将损坏的.git文件夹复制到其他设备后,警告依然会复现,和设备本地Git全局配置、系统环境无关。
根本原因
该警告由Git的文件系统监控模块(fsmonitor,用于加速文件状态扫描)触发:当fsmonitor存储本地最后更新令牌的缓存文件因Git进程异常中断、磁盘写入错误、旧版本Git功能bug出现内容损坏,令牌字段为空时,每次Git启动调用fsmonitor读取状态都会打印该警告。
损坏的文件属于Git运行时自动生成的缓存数据,不属于仓库版本历史的一部分,删除后Git会自动重新生成,不会损坏提交、分支、stash贮藏等任何用户数据。
解决方法(完整保留stash贮藏记录)
不需要删除仓库重新克隆,按以下步骤操作即可:
- 关闭所有访问该仓库的程序,包括Git命令行进程、GUI客户端、内置Git功能的IDE,避免文件被占用无法删除。
- 在仓库根目录执行命令,清理损坏的fsmonitor缓存文件:
Windows系统可以直接打开显示隐藏文件的资源管理器,进入# 清理fsmonitor守护进程缓存 rm -rf .git/fsmonitor--daemon/ # 清理新版本Git存放的fsmonitor生成缓存 rm -rf .git/generated/fsmonitor*.git目录手动删除上述名称的文件夹。 - 验证修复效果:执行任意Git命令比如
git status,确认警告不再出现即可。 - (极端场景兜底)如果清理缓存后警告依然存在,可以执行命令关闭当前仓库的fsmonitor功能:
git config core.fsmonitor false
操作完成后所有stash记录、分支、提交历史都会完整保留,Git输出回归标准格式,第三方工具的解析异常也会同步解决。
内容的提问来源于stack exchange,提问作者HugoRune
相关产品推荐
相关产品推荐

