Git误将PNG图片识别为已修改(CRLF转LF)无法撤销如何解决
问题原因
该问题的核心是Git误将PNG这类二进制文件识别为文本文件,触发了自动换行符转换逻辑,修改了文件内容。哪怕你执行checkout恢复文件,Git的自动转换规则仍会在文件写入后再次修改内容,所以始终显示为已修改状态,你在diff阶段看到的CRLF替换警告就是该逻辑触发的提示。
解决方案
方案一:项目级配置(推荐,可同步给所有项目成员避免同类问题)
- 第一步:在项目根目录创建或编辑
.gitattributes文件,添加如下规则,明确标记PNG为二进制文件,不做任何换行符转换:
*.png binary # 可按需扩展其他二进制文件格式,例如 # *.jpg binary # *.gif binary # *.ico binary # *.woff binary
- 第二步:清除Git对该文件的错误缓存:
git rm --cached public/css/chosen-sprite.png - 第三步:恢复远端的正确版本文件:
git checkout HEAD -- public/css/chosen-sprite.png - 第四步:将
.gitattributes文件提交到仓库,后续所有成员拉取代码后都不会再触发同类问题:git add .gitattributes && git commit -m "fix: 配置二进制文件跳过换行符转换逻辑"
方案二:本地临时修复(仅自己本地生效,不会修改项目配置)
- 执行如下命令关闭本地Git全局换行符自动转换后重新恢复文件即可:
git config core.autocrlf false git checkout HEAD -- public/css/chosen-sprite.png
注意:该方案会关闭本地全局的换行符自动转换,如果同时开发Windows、Linux跨平台项目需要自动适配换行符时不建议使用,优先选择方案一。
内容的提问来源于stack exchange,提问作者mahen3d
相关产品推荐
相关产品推荐

