执行git restore时在大小写同名文件间反复切换无法丢弃改动怎么办
故障根因
你遇到的“执行git restore ABC.sql就生成abc.sql、执行git restore abc.sql就生成ABC.sql”的循环异常,本质是大小写不敏感文件系统(Windows、macOS默认文件系统均属于这类)下,Git索引存储的文件名大小写,与磁盘实际存储的文件大小写不匹配导致的经典问题。
你之前尝试的git restore、git checkout、git reset全部失效的原因是:Git默认开启了core.ignorecase配置,会模糊匹配文件名大小写,永远无法精准定位到索引中存的那个错误大小写路径,自然无法完成清理操作。
可落地的解决步骤
- 第一步:关闭Git的大小写模糊匹配
执行命令修正匹配规则,让Git严格按照文件名大小写匹配路径:git config core.ignorecase false - 第二步:清除存错大小写的旧Git索引
执行以下命令清空旧的索引缓存,该操作仅删除Git内部的路径记录,不会改动磁盘上存储的任何实际文件:git rm -r --cached . - 第三步:重建和磁盘状态一致的新索引
扫描当前仓库的真实文件结构,把正确的大小写路径重新写入Git索引,覆盖之前的错误记录:git add . - 第四步:完成原本需要的清理操作
先执行git status检查当前显示的文件路径,确认和磁盘上实际存在的文件名大小写完全一致,再执行你原本计划的丢弃未提交改动的操作(比如git restore .、git restore ABC.sql),就不会再出现不同大小写文件循环生成的异常。
特殊情况处理:如果操作过程中提示存在文件名重名冲突,先把你不需要保留的那个错置的.sql文件临时移动到仓库目录外的临时文件夹,等索引重建完成后,再将需要留存的文件移回仓库即可。
内容的提问来源于stack exchange,提问作者Sonal Dubey
相关产品推荐
相关产品推荐

